繁体   English   中英

正则表达式匹配不匹配的html

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM