假设我有这样的文本:
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>
图案演示
Code: (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);
Output:
This is a great <span style="color: #FF0000;">test</span>! We're testing something awesome. Click here to <a href="whatever">test it!</a>.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)