php preg_replace需要帮助

时间:2011-01-11 07:51:34

标签: php regex preg-replace

我创建了一个搜索字符串并用链接替换这些字符串中的关键字的函数。我正在使用

preg_replace('/\b(?<!=")(?<!=\')(?<!=)(?<!=&quot;)(?<!>)(?<!&gt;)' . $keyword . '(?!</a)(?!&lt;/a)\b', $newString, $row);

正在按预期工作。唯一的问题是如果有人有像这样的链接

<a href="www.domain.tdl/keyword.html">Luxury Automobile sales</a>

Automobile在此示例中为$keyword

最终看起来像

<a href="www.domain.tdl/keyword.html">Luxury <a href="www.domain.tdl/keywords.html">Automobile</a> Sales</a>

你可以理解我的沮丧。 对正则表达式没有信心我以为我会问这里是否有人知道解决方案。

谢谢!

1 个答案:

答案 0 :(得分:3)

正确的HTML解析器如DOMDocument?

怎么样?
$html = '<a href="www.domain.tdl/keyword.html">Luxury Automobile sales</a>';
$dom  = new DomDocument;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('a');
foreach ($nodes as $node)
{
  $node->nodeValue = str_replace('Automobile', 'Cars', $node->nodeValue);
  echo simplexml_import_dom($node)->asXML();
}

获取元素属性也不是问题

foreach ($nodes as $node)
{
  $attr = $node->getAttributeNode('href');
  $attr->value = str_replace('Automobile', 'keyword', $attr->value);
  echo simplexml_import_dom($node)->asXML();
}