正则表达式可选字符

时间:2012-11-10 20:33:11

标签: php regex

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/

怎么了?

4 个答案:

答案 0 :(得分:1)

嗯,你为什么不试试

<\/div><img src="http:\/\/www.example.com\/.*?\/>

您失败的原因是您使用方括号[]来定义匹配字符列表,然后告诉正则表达式匹配任何这些字符一次或多次(+ )。由于未包含in,因此匹配将分别停在internet.gifnano.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来查找不仅仅是一个,而是查找所有匹配项。