好吧,让我说我正在尝试解析这个问题:
href="http://google.com">Website</a>
这不起作用:
preg_match('/href="http:\/\/(.+)">/', $a, $b);
但这样做:
preg_match('/href="http:\/\/(.+)">Website/', $a, $b);
这是为什么?第一个只是继续到字符串的末尾。
答案 0 :(得分:5)
这里的问题是你的选择器是贪婪的 - 它会匹配它可能的最长字符串:
preg_match('/href="http:\/\/(.+)">/', $a, $b);
由于您使用“任何字符”(.
),因此它会在输入字符串中最后一次出现的">
之前进行匹配。
如果你使选择器非贪婪,那么它将在最短的匹配时停止:
preg_match('/href="http:\/\/(.+?)">/', $a, $b);
注意正则表达式模式中的额外?
,它将“一个或多个”(+
)运算符修改为无贪心。
默认情况下,您也可以使用u
modifier使所有选择器都非贪婪:
preg_match('/href="http:\/\/(.+)">/u', $a, $b);
答案 1 :(得分:0)
这是我用它测试的最好的href解析器
preg_match("#href=[\"|']([^\"]*)[\"|']#",' '.$a.' ',$b);