Preg_match_all特定链接

时间:2015-06-01 15:28:34

标签: php regex preg-match-all

我试图在html代码中搜索它,如何修复它?

<a href="http://www.filman.cz/ex-machina-2015-3/" rel="bookmark">

(仅限该链接)

我使用过这个preg_match_all,但似乎编写得不好

preg_match_all("/<a href=\"([^\"]*)\"/", $links_area, $matches );

我不知道为什么,但它不起作用。我认为某个地方会被严重打算&#34; /&#34;或&#34; *&#34;但我不确切地知道。 顺便说一句,为什么&#34;质量标准&#34;在这个网站上这么难?我有问题在这里发布一切。

3 个答案:

答案 0 :(得分:4)

我会考虑将 DOM XPath 用于此任务,下面是一个示例:

$doc = DOMDocument::loadHTML('
     <a href="http://www.filman.cz/ex-machina-2015-3/" rel="bookmark">
     <a href="http://www.facebook.com">Visit Us On Facebook</a>
     <a href="https://www.paypal.com">Pay Now</a>
     <a href="http://www.filman.cz/ex-machina-2015-5/" rel="bookmark">
');

$xp = new DOMXPath($doc);

foreach ($xp->query('//a[@rel="bookmark"]') as $link) {
   $matches[] = $link->getAttribute('href');
}

print_r($matches);

输出

Array
(
    [0] => http://www.filman.cz/ex-machina-2015-3/
    [1] => http://www.filman.cz/ex-machina-2015-5/
)

注意:我不确定您对输出的期望,但这有助于您避免使用正则表达式。

如果您只是尝试匹配包含“filman.cz”的@href值,则可以使用contains() OR substring()和XPath查询。

答案 1 :(得分:0)

您可以使用此正则表达式。它匹配以Platform.position开头的所有元素,并选择<a属性的内部。

<a(?:[^>])+href="(https?\:\/\/[^\"]+)\"(?:[^>])*>

编辑:我完全忘了Xpath ..它专门为这类工作而设计,所以使用hwnd的答案,这是解析HTML文档的最佳选择。

答案 2 :(得分:0)

我认为它可能效率较低但更准确

/<a\s+href="(http(?:s)?:\/\/[\w\.\/-]+)".*?>/g

说明:

<a\s+ - &gt;标记'a'+空格

href=\" - &gt; href til引用

(http(?:s)? - &gt; http或https

: \/\/ - &gt;文字“:”和“//”

[\w\.\/-]+) - &gt;网址字符

".*?> - &gt;字面引号和其他任何内容,直到“&gt;”

PHP代码:

$re = "/<a\\s+href=\"(http(?:s)?:\\/\\/[\\w\\.\\/-]+)\".*?>/"; 
$str = "<a href=\"http://www.filman.cz/ex-machina-2015-3/\" rel=\"bookmark\">"; 

preg_match_all($re, $str, $matches);

DEMO