我正在尝试查找与已定义超文本的HTML超链接标记匹配的正则表达式。例如:
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
我需要匹配其超文本为“已定义文本”的任何超链接。
我刚刚在Regular Expression Library上找到了以下表达式,但它没有解决问题。
<a.+?href\=(?<link>.+?)(?=[>\s]).*?>(?<lnkText>.+?)</a>
我希望有一个适用于PHP的解决方案。
答案 0 :(得分:2)
$regex = "/<a\s.*href.*>The defined text<\/a>/"; //corrected as per the comments
$str = '<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The Not-defined text</a>
';
preg_match($regex, $str, $matches);
foreach($matches as $match) echo $match."<br/>";
它将匹配
中的整个字符串<a href
到结束标记。
</a>
修改强>
技术上正则表达式可能只是:
$regex = "/<a\s.*>The defined text<\/a>/"
事实上这可能更好!
感谢评论中的捕获!
答案 1 :(得分:1)
$html='<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The
defined text</a>';
preg_match_all("/<a.+?href\=\"([^\"]*)\"[^>]*>The defined Text<\\/a>/",$html,$matches);
foreach($matches[1] as $match) echo "Link found: " . $match;
返回
链接发现:blah blah
如果您希望数组包含所有匹配项:
$matches[1]
答案 2 :(得分:1)
尝试这个:
DEMO LIVE:https://eval.in/85894
$p = '/<a.*? (href=".*?").*?>The defined text<\/a>/';
$str = '
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text2</a>
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
';
preg_match_all($p,$str,$m);
print_r($m[1]);
输出:
Array
(
[0] => href="blah blah"
)
答案 3 :(得分:0)
您可以使用此正则表达式:
((?=<a.+href).*(?<=</a>))[^</a]
对于全局搜索,您必须添加标记“g”并禁用区分大小写的标记“i”
至于php:
$html = '<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a HREF="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>
<a anyAttribute="" anyThingElse="anyValue" href="blah blah">The defined text</a>';
preg_match('/((?=<a.+href).*(?<=</a>))[^</a]/gi', $html, $matches);
var_dump($matches);
此解决方案用于获取具有href属性的所有链接,即使多个“a”放在一行。例如:
<a HREF="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a><a>asdasd</a>