我在挣扎...... 我使用这个简单的代码在文本中搜索单词并添加相关文本:
$search=array("/\bword1\b/","/\bword2\b/","/\bword3\b/");
$replace=array("<a href='link1'>word1</a>",ecc);
preg_replace($search,$replace,$myText);
当在$ myText中的html之间找到一个搜索模式时出现问题。例如:
$myText="blablablabla <strong class="word1">sad</strong>";
正如您所看到的,word1是链接的css类。如果我运行preg_replace将销毁那里的每个标记。
如何编辑我的$搜索模式以便在html内部不匹配,例如:[^&lt;。?*&gt;]?
由于
答案 0 :(得分:1)
简单易用的解决方法是:
preg_replace("# [>][^<]*? \K \b(word1)\b #x", $replace, $txt);
这可以确保在单词之前有一个结束>
尖括号。 (\K
让它忘记匹配的部分)。但是它只会替换每个封闭标签/段落等的word1
的第一次出现。
因此,更好的解决方案是在回调函数中使用preg_replace_callback("/>([^<]+)/")
和第二个word1|word2|word3
正则表达式(现有代码)。