1

次の配列に拡張子を持つすべての URL を取得する正規表現を探しています。

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

この配列は、呼び出された内部 WordPress 関数によって返され、wp_get_video_extensions()WordPress が認識するビデオ URL です。

コンテンツのブロックは、内部に URL がある場合、次のようになります。

「はい、でも私はそれなりのペースで成長しています」とヤマネは言いました:「そんなばかげた方法ではありません。」そして彼は非常に不機嫌そうに起き上がり、コートの反対側に渡りました。

その間ずっと、女王は帽子屋をじっと見つめていました。ヤマネが法廷を横切ったちょうどその時、女王は法廷の役人に言いました。惨めな帽子屋は震えすぎて、靴を両方とも脱ぎ捨てました。

[動画 mp4="http://www.example.com/files/video/video1.mp4"][/video]

「証拠を出せ」と王様は怒って繰り返した。

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

「私は貧乏人です、陛下」と帽子屋は震える声で言い始めました。薄い――そしてお茶のきらめき――」

そこにある両方のビデオURLを見つけて、URL全体を配列に返すようにしようとしています。

ここに私が持っているものがあります:

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

最初の問題は、すべての「/」をエスケープしなかったことです。2 番目の問題は、それが行の最初と最後である場合にのみ一致させようとしていることです。これはそれを処理する必要があります。

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 に答える