[英]Regexp matching mismatched html
我如何从html中解析出某种链接样式,而不将其散布到多个链接中以进行匹配?
我要匹配的确切链接是:
href="http://www.hotmail.com' rel='external nofollow"
请特别注意上面的'和'的不匹配。
我试过的
if(preg_match('|href="http(.*?)\' rel=\'(.*?)"|i', $html)){
echo "Found bad html\n";
}
但是,该regexp也可以在多个链接中完美匹配html。 我需要只能在单个链接内进行匹配。
您可能可以通过替换通用.*?
来适应您的正则表达式.*?
带有负字符类,例如[^<"'>]+
,通常可以防止它吃得太多。
if(preg_match('| href="(http[^<"\'>]+)\' rel=\'([^<"\'>]+)"|i', $html)){
更好的是:不要对"
和'
硬编码,但也要使用字符类来匹配它们:
if(preg_match('| href=["\']http([^<"\'>]+)["\']'
.' rel=["\']([^<"\'>]*)["\']|i', $html)){
(哦,现在看起来真的很丑。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.