使preg_replace在html中不起作用

时间:2011-02-18 19:10:50

标签: php

我在挣扎...... 我使用这个简单的代码在文本中搜索单词并添加相关文本:

$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;]?

由于

1 个答案:

答案 0 :(得分:1)

简单易用的解决方法是:

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

这可以确保在单词之前有一个结束>尖括号。 (\K让它忘记匹配的部分)。但是它只会替换每个封闭标签/段落等的word1的第一次出现。

因此,更好的解决方案是在回调函数中使用preg_replace_callback("/>([^<]+)/")和第二个word1|word2|word3正则表达式(现有代码)。