正则表达式匹配定义的超文本的超链接

时间:2014-01-04 19:04:02

标签: php regex hyperlink

我正在尝试查找与已定义超文本的HTML超链接标记匹配的正则表达式。例如:

<a href="blah blah" anyAttribute="" anyThingElse="anyValue">The defined text</a>

我需要匹配其超文本为“已定义文本”的任何超链接。

我刚刚在Regular Expression Library上找到了以下表达式,但它没有解决问题。

<a.+?href\=(?<link>.+?)(?=[>\s]).*?>(?<lnkText>.+?)</a>

我希望有一个适用于PHP的解决方案。

4 个答案:

答案 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>