【问题标题】:PHP extract link from <a> tag [duplicate]PHP从<a>标签中提取链接[重复]
【发布时间】:2011-09-15 23:31:23
【问题描述】:

可能重复:
PHP String Manipulation: Extract hrefs

我正在使用 php 并且有包含内容的字符串 =

&lt;a href="www.something.com"&gt;Click here&lt;/a&gt;

我需要摆脱除“www.something.com”之外的所有内容 我认为这可以用正则表达式来完成。 任何帮助表示赞赏! 谢谢

【问题讨论】:

  • 似乎每个人都想这样做。

标签: php string hyperlink extract href


【解决方案1】:

使用 SimpleXML 很容易做到这一点:

$a = new SimpleXMLElement('<a href="www.something.com">Click here</a>');
echo $a['href']; // will echo www.something.com

【讨论】:

  • 一条线解决方案$url = (string)( new SimpleXMLElement('&lt;a href="www.something.com"&gt;Click here&lt;/a&gt;'))['href'];
【解决方案2】:

试一试:

$link = '<a href="www.something.com">Click here</a>';
preg_match_all('/<a[^>]+href=([\'"])(?<href>.+?)\1[^>]*>/i', $link, $result);

if (!empty($result)) {
    # Found a link.
    echo $result['href'][0];
}

结果:www.something.com

更新:现在需要匹配引用样式,解决下面的评论。

【讨论】:

  • 这个可以匹配这个:href="_url_' 那错了
  • 不是 100%。如果您允许',那么您甚至应该不允许引用:href=url。现在事情变得更难了。
  • 确实如此,随着准确性的提高,复杂性也随之增加。我将由 OP 来决定我提出的建议是否对他的申请“足够好”。如果您要进入兔子洞,请先阅读以下内容:stackoverflow.com/questions/1732348/…
  • 那个链接是我想带给你的地方^_^
【解决方案3】:

我建议使用以下代码:

$str = '<a href="www.something.com">Click here</a>';
preg_match('/href=(["\'])([^\1]*)\1/i', $str, $m);
echo $m[2] . "\n";

输出

www.something.com

这将处理 href 链接中的单引号 ' 和双引号 "。

【讨论】:

  • 完全不是因为你写的只是([^"]*)
  • @yes123:请立即检查,我的意思是在此处使用反向引用 \1,但急于输入 "。
  • 现在好多了。还考虑到您需要第一个括号,您可以将其简化为 ("|\')
【解决方案4】:

假设这是 ALWAYS 变量的格式,下面应该可以解决问题。如果内容可能不是链接,这将不起作用。本质上,它会查找包含在两个引号中的数据。

<?php

$string = '<a href="www.something.com">Click here</a>';

$pattern = '/"[a-zA-Z0-9.\/\-\?\&]*"/';

preg_match($pattern, $string, $matches);
print_r($matches);
?>

【讨论】:

  • 是的。正如你所看到的,我的正则表达式有点生疏;)
【解决方案5】:

你的问题可能不是那么简单,但这正是你所要求的:

$link = '<a href="www.something.com">Click here</a>';
$href = substr($link, 9, -16);

$href 是:

string(17) "www.something.com"

作为一个正则表达式可以这样表达:

$href = preg_match('(^<a href="([^"]*)">Click here</a>$)', $link, $matches) ? $matches[1] : die('Invalid input data.');

这有用吗?

【讨论】:

  • 大声笑,你要求很多 -1 吗?注意我没有-1你。您可以查看我的个人资料/声誉
猜你喜欢
  • 1970-01-01
  • 2011-11-18
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多