Php 使preg_replace不在html内部工作

Php 使preg_replace不在html内部工作,php,Php,我在努力。。 我使用此简单代码搜索文本中的单词并添加相关文本: $search=array("/\bword1\b/","/\bword2\b/","/\bword3\b/"); $replace=array("<a href='link1'>word1</a>",ecc); preg_replace($search,$replace,$myText); $search=array(“/\bword1\b/”、“/\bword2\b/”、“/\bword3\b/”; $

我在努力。。 我使用此简单代码搜索文本中的单词并添加相关文本:

$search=array("/\bword1\b/","/\bword2\b/","/\bword3\b/");
$replace=array("<a href='link1'>word1</a>",ecc);
preg_replace($search,$replace,$myText);
$search=array(“/\bword1\b/”、“/\bword2\b/”、“/\bword3\b/”;
$replace=数组(“,ecc);
preg_replace($search,$replace,$myText);
当在$myText内的html之间找到一个搜索模式时,问题就会出现。例如:

$myText="blablablabla <strong class="word1">sad</strong>";
$myText=“blablasad”;
如您所见,word1是链接的css类。如果我运行preg_replace,将销毁那里的所有标记

我如何编辑我的$search模式,使其在html内部不匹配,比如:[^]


谢谢

简单的解决方法是:

preg_replace("# [>][^<]*? \K \b(word1)\b #x", $replace, $txt);

preg\u replace(“#[>][^([^对于你的问题,这里有一个非常流行且相关的答案,不使用正则表达式。请改用DOM。@Damp:它很流行,因为它在最不相关的上下文中被引用而过于泛化和错误。为什么要在*之间留空格?\k\b?@yes123:末尾的
#x
标志允许更多的可读性/空格。它在你的e中失败了例如,因为html文本没有包含在标记中。将regex start更改为
#(^ |>)[^Btw,codepad对我来说也失败:-尝试正常的PHP设置。@mario:再次lol。这太棒了!这避免了我使用DOM解析器!!谢谢!如果我也能看到上面的示例(比有趣的链接更真实),我会给你更多的声誉您无法解析html…)