我正在尝试匹配网址标记中包含的图片网址,如下所示
[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]
然后它不再有效。关于变通方法/修复的任何想法??
答案 0 :(得分:1)
我猜您需要修改.*
以使用non-greedy quantifier,.*?
,如下所示:
\[URL=("|)([\s\S]*?)("|)]\[img\](https?:\/\/.*?\.(?:png|jpg))\[\/img]\[\/URL\]
答案 1 :(得分:1)
您的.*
尽可能匹配,包括][IMG]
。您可以通过排除]
:[^]]*
答案 2 :(得分:1)
你可以做的快速修复是使用惰性量词而不是贪心量词。换句话说,将.*
替换为.*?
您可以使用更有效的模式来避免延迟量词,例如:
$pattern ='~\[URL=([^]]*+)]\[IMG]([^[]*+)\[/IMG]\[/URL]~';