请看这个简单的脚本

$a = "test";
echo $b = preg_replace('/[^a](e)/',"<b>$1</b>",$a); // returns <b>e</b>st


当前面没有“ a”字符时,我想加粗“ e”字符。

从逻辑上讲,在$0中它必须与"te"匹配,并且在$1-"e"中,但是为什么它在我的示例中删除了第一个字符?

我可以用另一种方式解决任务,但我想了解这种行为。

非常感谢

最佳答案

为什么在我的示例中删除第一个字符?


因为匹配是两个字符宽:e和它前面的字符(用[^a]表示)。

要改变这一点,有两种方法。简单的方法就是括号内的匹配项:

echo $b = preg_replace('/([^a])(e)/',"$1<b>$2</b>",$a); // returns t<b>e</b>st


第二种是使用negative lookbehind

echo $b = preg_replace('/(?<!a)(e)/',"<b>$1</b>",$a); // returns t<b>e</b>st

关于php - preg_replace()函数有问题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4144762/

10-11 05:35