php正则表达式替换HREF属性

时间:2011-07-01 17:16:02

标签: php regex preg-replace

如何使用php preg_replaceregular expression删除包含<a href="#的所有超链接。这是我写的,但它不起作用

$newlink = preg_replace('/^<a href="#(.*)" (?:.*?)>(.*)<\/a>/is', '', $link);

我想将这些链接替换为anchor mark

<a href="#part1">go to part1</a>
<a href="#part2">go to part2</a>
<a href="#part3">go to part3</a>

为空值。

4 个答案:

答案 0 :(得分:3)

首先让我说使用正则表达式来解析/修改HTML文档可能是错误的方法。如果您正在进行任何其他修改,我建议您查看DOM Document

话虽如此,让你的表达非贪婪(.*?)可能会奏效。

$newlink = preg_replace('/^<a href="#(.*?)"[^>]+>(.*?)<\/a>/', '', $link);

注意:这也假定href是所有锚标记中的第一个属性。这可能是一个不好的假设。

答案 1 :(得分:1)

它只从html

中删除了href属性
echo preg_replace('/(<[^>]+) href=".*?"/i', '$1', $content);

答案 2 :(得分:0)

如果您只想替换href的值,则需要使用断言来匹配它而不匹配任何其他值。此正则表达式仅匹配URL:

/(?<=<a href=")#.*?(?=")/

答案 3 :(得分:0)

非常感谢,但你的答案对我来说仍然不起作用。

我不擅长regular expression,我读了很多文件然后再写一遍。也许这看起来很难看,但它有效:)

$newlink = preg_replace('/(<a href=")#.*?(<\/a>)/is', '', $link);