php regex在href标签内获取自定义url和字符串

时间:2013-07-08 14:06:05

标签: php regex

我得到这样的页面内容:

$html = file_get_contents('example.ir');

现在我想在 $ html 中获取href标签,其中必须是自定义网址+字符串;

例如我有三个href:

1- href="http://example.ir/salam/ali/...."  => http://example.ir/ + salam/ali/....
2- href="http://example.ir/?id=123/..."     => http://example.ir/ + ?id=123/...
3- href="?kambiz=khare/..."                 => ?kambiz=khare/...

我想要数字1和2,因为 http://example.ir +一些字符串

Resault必须像这样:

1- http://example.ir/salam/ali/....
2- http://example.ir/?id=123/...

帮帮我PLZ:)

1 个答案:

答案 0 :(得分:2)

描述

此正则表达式将捕获锚标记,前提是它们具有href属性,其值以http://example.ir/开头。然后它会将整个href值捕获到捕获组1中。

<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref="(http:\/\/example\.ir\/[^"]*))  # get the href attribute
(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?> # get the entire  tag
.*?<\/a>

enter image description here

实施例

示例文字

注意最后一行有一个可能很困难的边缘情况。

<a href="http://example.ir/salam/ali/....">salam ali</a>
<a class="Fonzie" href="http://example.ir/?id=123/...">plus id 123</a>
<a class="Fonzie" href="?kambiz=khare/...">not an http</a>
<a onmouseover=' href="http://example.ir/salam/ali/...." ; funHrefRotater(href) ; " href="?kambiz=khare/...">again not the line we are looking for</a>

<强>代码

此PHP示例仅显示匹配的工作方式。

<?php
$sourcestring="your source string";
preg_match_all('/<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref="(http:\/\/example\.ir\/[^"]*)) # get the href attribute
(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"\s]*)*"\s?> # get the entire tag
.*?<\/a>/imx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

<强>匹配

[0][0] = <a href="http://example.ir/salam/ali/....">salam ali</a>
[0][1] = http://example.ir/salam/ali/....
[1][0] = <a class="Fonzie" href="http://example.ir/?id=123/...">plus id 123</a>
[1][1] = http://example.ir/?id=123/...