正在尝试查找页面上的链接。
我的正则表达式是:
/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/
但是看起来失败了
<a title="this" href="that">what?</a>
如何更改正则表达式以处理未放在a标记中的href?
发布于 2010-09-29 19:43:03
我同意戈登的观点,你必须使用HTML解析器来解析HTML。但是如果你真的想要一个正则表达式,你可以试试这个:
/^<a.*?href=(["\'])(.*?)\1.*$/
这与字符串开头的<a
匹配,然后是任意数量的字符(非贪婪) .*?
,然后是href=
,最后是由"
或'
包围的链接
$str = '<a title="this" href="that">what?</a>';
preg_match('/^<a.*?href=(["\'])(.*?)\1.*$/', $str, $m);
var_dump($m);
输出:
array(3) {
[0]=>
string(37) "<a title="this" href="that">what?</a>"
[1]=>
string(1) """
[2]=>
string(4) "that"
}
发布于 2010-09-29 18:22:24
您要查找的模式将是链接锚模式,如(something):
$regex_pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
发布于 2010-09-29 18:21:13
你为什么不直接匹配
"<a.*?href\s*=\s*['"](.*?)['"]"
<?php
$str = '<a title="this" href="that">what?</a>';
$res = array();
preg_match_all("/<a.*?href\s*=\s*['\"](.*?)['\"]/", $str, $res);
var_dump($res);
?>
然后
$ php test.php
array(2) {
[0]=>
array(1) {
[0]=>
string(27) "<a title="this" href="that""
}
[1]=>
array(1) {
[0]=>
string(4) "that"
}
}
这是可行的。我刚刚删除了第一个捕获大括号。
https://stackoverflow.com/questions/3820666
复制相似问题