0

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

4 回答 4

1

嗯,你为什么不试试

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

您失败的原因是您使用方括号[]定义匹配字符列表,然后告诉正则表达式匹配任何这些字符一次或多次(+)。由于既不包括i也不包括,匹配分别在和n的开头停止。internet.gifnano.png

于 2012-11-10T20:42:39.927 回答
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
于 2012-11-10T20:44:49.963 回答
0

你需要圆括号,而不是方括号。方括号表示一个字符类,它匹配括号中的任何单个字符。您也不希望 and 之间的点/div><img因为在您的示例中它们之间没有差距。

于 2012-11-10T20:41:32.353 回答
0
/(<\/div>(?:<img\w*src="http:\/\/www\.example\.com\/[^"]+?"[^>]*?>)?)/m

还可以使用 preg_match_all 来查找不仅仅是一个,而是所有匹配项。

于 2012-11-10T20:47:36.527 回答