请看这个简单的脚本
$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/