3个字符串(这里是HTML代码,请不要说使用HTML解析器,我必须使用RegEx):
</div><img src="http://www.example.com/nano.png" alt="NANOTECH" />
</div><img src="http://www.example.com/internet.gif" alt="INTERNET" />
</div>
我想抓住3条线。所以尝试了这个:(PHP preg_match
)
<\/div>.[<img src="http:\/\/www.example.com\/.*?\/>]+
但它只是</div><img src="http://www.example.com/
怎么了?
答案 0 :(得分:1)
<\/div><img src="http:\/\/www.example.com\/.*?\/>
您失败的原因是您使用方括号[]
来定义匹配字符列表,然后告诉正则表达式匹配任何这些字符一次或多次(+
)。由于未包含i
和n
,因此匹配将分别停在internet.gif
和nano.png
的开头。
答案 1 :(得分:1)
将preg_match_all与正则表达式
一起使用/^<\/div>(<img src="http:\/{2}www.example.com[^>]*>)?$/m
或使用带有正则表达式的preg_match
/(^<\/div>(<img src="http:\/{2}www.example.com[^>]*>)?$(?:\n?|\Z))+/m
答案 2 :(得分:0)
你需要圆括号,而不是方括号。方括号表示一个字符类,它匹配括号中任何一个字符。您也不需要/div>
和<img
之间的点,因为您的示例中它们之间没有差距。
答案 3 :(得分:0)
/(<\/div>(?:<img\w*src="http:\/\/www\.example\.com\/[^"]+?"[^>]*?>)?)/m
也可以使用preg_match_all来查找不仅仅是一个,而是查找所有匹配项。