1

我正在寻找一个正则表达式,它将抓取所有具有以下数组扩展名的 url:

Array
(
    [0] => mp4
    [1] => m4v
    [2] => webm
    [3] => ogv
    [4] => wmv
    [5] => flv
)

该数组由一个名为 WordPress 的内部函数返回,wp_get_video_extensions()并且是 WordPress 识别的视频 URL。

一个内容块看起来像这样,里面有 URls:

“是的,但是我以合理的速度成长,”睡鼠说,“不是那种荒谬的方式。” 然后他很闷闷不乐地起身,走到球场的另一边。

女王一直盯着帽匠,就在睡鼠穿过法庭时,她对法庭的一名官员说:“把上一场音乐会的歌手名单拿给我!” 可怜的帽匠在上面颤抖得厉害,他把两只鞋子都抖掉了。

[视频 mp4="http://www.example.com/files/video/video1.mp4"][/video]

“把你的证据拿出来,”国王生气地重复道,“不然我就把你处死,不管你紧张与否。”

http://www.example.com/files/video/video2.flv

“我是个穷人,陛下,”帽匠用颤抖的声音开口道,“——而且我还没有开始喝茶——不到一个星期左右——而且面包和黄油越来越多怎么办?稀薄——还有茶的闪烁——”

我试图让它在其中找到两个视频网址并返回数组中的整个网址。

这是我所拥有的:

preg_match_all( '/^https?:\/\/(?:[a-z\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:' . implode( '|', wp_get_video_extensions() ) . ')$/', $post->post_content, $matches);

我得到了这个:

警告:preg_match_all():未知修饰符 '['

理想情况下,我想得到这个:

Array
(
    [0] => Array
           (
               [0] => http://www.example.com/files/video/video1.mp4
               [1] => http://www.example.com/files/video/video2.flv
           )
    [1] => Array
           (
               [0] => http://www.example.com/
               [1] => http://www.example.com/
           )
    [2] => Array
           (
               [0] => files/video/
               [1] => files/video/
           )
    [3] => Array
           (
               [0] => video1.mp4
               [1] => video2.flv
           )
)

但这也是完美的,因为我parse_url()以后可以用它来打破其余部分:

Array
(
    [0] => http://www.example.com/files/video/video1.mp4
    [1] => http://www.example.com/files/video/video2.flv
)
4

1 回答 1

1

你的第一个问题是你没有逃脱所有的“/”。第二个问题是,只有当那是行的开头和结尾时,您才尝试匹配。这应该照顾它。

preg_match_all('~https?://(?:[a-z\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:' . implode( '|', wp_get_video_extensions() ) . ')~', $post->post_content, $matches);

使用“~”可以让您不必转义“/”。

于 2013-10-29T03:42:33.630 回答