可能是重复问题:
PHP字符串操作:提取hrefs
我正在使用php,并且有一个包含以下内容的字符串:
<a href="www.something.com">点击这里</a>
我需要除了"www.something.com"以外的所有内容都去掉,我认为可以用正则表达式来完成。 感谢任何帮助!
使用SimpleXML非常容易实现:
$a = new SimpleXMLElement('<a href="www.something.com">Click here</a>');
echo $a['href']; // will echo www.something.com
$url = (string)( new SimpleXMLElement('<a href="www.something.com">点击这里</a>'))['href'];
- SkyRar试试这个:
$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_'
,但是这是错误的。 - dynamic'
,那么甚至可以没有引号:href=url
。现在事情变得更加困难了。 - dynamic$str = '<a href="www.something.com">Click here</a>';
preg_match('/href=(["\'])([^\1]*)\1/i', $str, $m);
echo $m[2] . "\n";
www.something.com
'
和双引号"
。([^"]*)
,就代表完全没有问题。 - dynamic\1
,但是匆忙中打成了"
。 - anubhava(“|\’)
。 - dynamic假设变量的格式始终是ALWAYS,下面的代码应该可以解决问题。如果内容可能不是链接,则此方法无效。本质上,它会查找两个引号之间包含的数据。
<?php
$string = '<a href="www.something.com">Click here</a>';
$pattern = '/"[a-zA-Z0-9.\/\-\?\&]*"/';
preg_match($pattern, $string, $matches);
print_r($matches);
?>
也许你的问题并不是那么简单,但这正好符合你的要求:
$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.');
这有帮助吗?