gpt4 book ai didi

php - 正则表达式:如何不替换任何 html 标签中的特定单词?

转载 作者:可可西里 更新时间:2023-11-01 00:55:09 25 4
gpt4 key购买 nike

让我们假设我有这样一段文字:

This is a great test! We're testing something awesome. Click here to <a href="whatever">test it!</a>.

我想给“test”这个词添加一些颜色,但如果它在 a 标签中则不行。我试过这样做:

/(?<!href="(.*?)">)test/

但它不起作用。它是这样工作的:

/(?<!href="whatever">)test/

当然我有很多链接,所以这不是一个选项。

整个代码应该是这样的:

$replacement = preg_replace('/(?<!href="SOLUTION HERE">)test/','<span style="color: #FF0000;">test</span>',$replacement);

预期结果:

This is a great <span style="color: #FF0000;">test</span>! We're <span style="color: #FF0000;">test</span>ing something awesome. Click here to <a href="whatever">test it!</a>.

最佳答案

与 html 字符串交互的快速但不太可靠的方法是使用正则表达式。 DomDocument(或类似的)是专门为解析 html 而设计的,并且更值得信赖。我将发布正则表达式方式,如果我可以管理它,我将添加 DomDocument 方式。

(*SKIP)(*FAIL)允许您匹配/使用和取消子字符串的资格,然后在管道之后为您实际想要替换的子字符串编写模式。

图案:~(?:<[^>]*>.*?</[^>]*>(*SKIP)(*FAIL))|\btest\b~s

替换:<span style="color: #FF0000;">\0</span>

Pattern Demo

代码:(Demo)

$string="This is a great test! We're testing something awesome. Click here to <a href=\"whatever\">test it!</a>.";
$pattern='~(?:<[^>]*>.*?</[^>]*>(*SKIP)(*FAIL))|\btest\b~s';
$replace='<span style="color: #FF0000;">\0</span>';
echo preg_replace($pattern,$replace,$string);

输出:

This is a great <span style="color: #FF0000;">test</span>! We're testing something awesome. Click here to <a href="whatever">test it!</a>.

关于php - 正则表达式:如何不替换任何 html 标签中的特定单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47846415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com