0

次のようにURLタグで囲まれた画像URLを一致させようとしています

[URL=http://www.google.com/sdaasd/sadasda/asddsa/sadsa/dasd.html][IMG]http://www.cnn.com/asd.jpg[/IMG][/URL] 

URL/IMG コンボの単一のインスタンスに対してのみ一致する場合にのみ完全に機能する次のパターンがあります

\[URL=("|)([\s\S]*?)("|)]\[img\](https?:\/\/.*\.(?:png|jpg))\[\/img]\[\/URL\]

ただし、次のように URL/IMAGE コンボを繰り返すと:

[URL=http://www.google.com/sdaasd/sadasda/asddsa/sadsa/dasd.html][IMG]http://www.cnn.com/asd.jpg[/IMG][/URL] [URL=http://www.google.com/sdaasd/sadasda/asddsa/sadsa/dasd.html][IMG]http://www.cnn.com/asd.jpg[/IMG][/URL]

その後、機能しなくなります。回避策/修正に関するアイデアはありますか??

4

3 に答える 3

1

私の推測では、次のように、貪欲でない量指定子,.*を使用するように変更する必要があります。.*?

\[URL=("|)([\s\S]*?)("|)]\[img\](https?:\/\/.*?\.(?:png|jpg))\[\/img]\[\/URL\]
于 2013-06-23T05:03:56.977 に答える
1

.*を含め、可能な限りマッチングしています][IMG]。を除外することでこれを回避できます][^]]*

于 2013-06-23T05:05:11.847 に答える
1

あなたができる簡単な修正は、貪欲な量指定子の代わりに怠惰な量指定子を使用することです。言い換えれば.*.*?

遅延量指定子を回避するより効率的なパターンを使用できます。例:

$pattern ='~\[URL=([^]]*+)]\[IMG]([^[]*+)\[/IMG]\[/URL]~';
于 2013-06-23T05:12:08.477 に答える