如何解析html中的某种链接样式而不将其分散到多个链接以匹配?
我想要匹配的确切链接是:
href="http://www.hotmail.com' rel='external nofollow"
要特别注意上面“和”的不匹配。
我尝试过:
if(preg_match('|href="http(.*?)\' rel=\'(.*?)"|i', $html)){
echo "Found bad html\n";
}
然而,regexp在几个链接中也匹配完美的html。我需要能够只在一个链接中匹配。
答案 0 :(得分:1)
您可以通过将通用.*?
替换为负[^<"'>]+
等字符类来调整正则表达式。这通常可以防止它吃太多。
if(preg_match('| href="(http[^<"\'>]+)\' rel=\'([^<"\'>]+)"|i', $html)){
更好的是:不要对"
和'
进行硬编码,而是使用字符类来匹配它们:
if(preg_match('| href=["\']http([^<"\'>]+)["\']'
.' rel=["\']([^<"\'>]*)["\']|i', $html)){
(哦,现在看起来很难看。)