php preg_replace 需要帮助

发布于 2024-10-11 08:47:22 字数 670 浏览 2 评论 0原文

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

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

它,它按预期工作。唯一的问题是,如果有人有一个像 Automobile 这样的链接

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

,就是本例中的 $keyword

最终看起来

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

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

谢谢!

I have created a function to search through strings and replace keywords in those strings with links. I am using

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

which is working as expected. The only issue is that if someone had a link like this

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

Automobile being our $keyword in this example.

It would end up looking like

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

You can understand my frustration.
Not being confident in regex I thought I would ask if anyone here would know a solution.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷了相思 2024-10-18 08:47:22

DOMDocument 这样的合适的 HTML 解析器怎么样?

$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();
}

How about a proper HTML parser like 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();
}

Is not a problem to get element attribute too

foreach ($nodes as $node)
{
  $attr = $node->getAttributeNode('href');
  $attr->value = str_replace('Automobile', 'keyword', $attr->value);
  echo simplexml_import_dom($node)->asXML();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文