正则表达式以获取具有某些扩展名的所有链接

时间:2013-10-28 16:15:43

标签: php regex wordpress

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

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

此数组由名为wp_get_video_extensions()的内部WordPress函数返回,是WordPress识别的视频URls。

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

  

'是的,但我以合理的速度成长,'睡鼠说:'不在   那种荒谬的时尚。“他非常生气地站起来,越过了   到法院的另一边。

     

女王从来没有离开过盯着帽匠,而且,   就像睡鼠穿过球场一样,她对其中一个说道   法庭的官员,'把我最后的歌手名单带给我   音乐会!'在那个可怜的帽匠颤抖的时候,他震撼了两个人   脱鞋了。

     

[video 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
)

1 个答案:

答案 0 :(得分:1)

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

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

使用“〜”使您不必逃避“/".