Php preg_replace,仅替换匹配元素的子字符串

Php preg_replace,仅替换匹配元素的子字符串,php,regex,preg-replace,Php,Regex,Preg Replace,使用preg_replace,我可以将匹配的子字符串替换为另一个,如下所示: echo preg_replace("yellow", "blue", "sky is yellow"); // print "sky is blue" 但是,是否可以仅用另一个字符串替换搜索字符串中的一个子字符串 举例来说,我想更改以下文本: <a>foo</a> <a class="changehere">foo</a> <a>foo</a>

使用preg_replace,我可以将匹配的子字符串替换为另一个,如下所示:

echo preg_replace("yellow", "blue", "sky is yellow");
// print "sky is blue"
但是,是否可以仅用另一个字符串替换搜索字符串中的一个子字符串

举例来说,我想更改以下文本:

<a>foo</a>
<a class="changehere">foo</a>
<a>foo</a>
foo
福
福

foo
联邦航空局
福
我试过这个:

echo preg_replace("@<a class="changehere">(foo)</a>@", "FAA", $text);
echo preg_替换(“@(foo)@”、“FAA”、$text);
但是整条线都改成了FAA。。。 如何根据周围的其他字符找到子字符串并仅替换该子字符串

谢谢你的帮助:)!
我希望我很清楚

假设您没有使用正则表达式解析HTML/XML,您可以使用以下正则表达式:

php > $text = '<a class="changehere">FAA</a>';
php > echo preg_replace('@<a class="changehere">\Kfoo(?=</a>)@', "FAA", $text);
<a class="changehere">FAA</a>
php>$text='FAA';
php>echo preg_替换('@\Kfoo(?=)@',FAA',$text);
联邦航空局
详细信息:

  • \K
    :重置所有匹配的信息
  • (?=)
    :向前看以断言我们在当前位置前面有

不要使用正则表达式搜索/修改HTML。使用
DOM
您是否看到代码中的文本颜色变化。这应该会产生一个错误这是一个简单的例子,我用一个大文件创建word,它不是html/XML文档。但它包含标签
php > $text = '<a class="changehere">FAA</a>';
php > echo preg_replace('@<a class="changehere">\Kfoo(?=</a>)@', "FAA", $text);
<a class="changehere">FAA</a>