使用正则表达式从html中删除某个标记格式

时间:2012-03-23 20:13:40

标签: php regex preg-replace preg-match

假设我有这个字符串:

some striinnngggg <a href="something/some_number">linkk</a> soooo <a href="someotherthing/not_number">asdfsadf</a>

我想从包含标记格式<a href="something/some_number"></a>的字符串中删除标记,而不剥离该标记的内容,其中some_number可以是任意数字

因此,在上面的示例中,所需的最终结果是

some striinnngggg linkk soooo <a href="someotherthing/not_number">asdfsadf</a>

注意第二个标签没有被剥离,因为链接的第二部分不是数字

如何使用regex / php的preg函数

完成此操作

2 个答案:

答案 0 :(得分:2)

使用正则表达式检测此类标记非常复杂,因为属性的顺序可能会发生变化,值可以用双引号,简单引号或无引号分隔。

我认为更简单的方法是使用DOMDocument查找匹配的标记:

$dom = new DOMDocument;
$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');

foreach ($links as $link) {
  if (preg_match("/[a-zA-Z0-9]+\/[0-9]+/", $link->getAttribute('href'))) {
    echo $link->nodeValue; // do whatever you need to do with the string here
  }
}

答案 1 :(得分:1)

表达式:

(<a.+?href=".*?\d.*?".*?>)(.+?)(</a>)

找到它,并替换为第二个令牌(取决于您的语言可能是$2\1\2),这只是链接文字。