preg_replace不替换所有东西

时间:2011-10-04 19:40:24

标签: php preg-replace

我试图让preg_replace从消息中完全删除字符串

以下是$消息的示例:

hello there john214

welcome to the site!

please get feel free to kick back and relax.

其中john214是通过db输出的用户名

现在我想使用preg_replace摆脱hello there john214,但是,我的代码正在删除除john214

之外的所有内容

继承我的代码:

$message = preg_replace('|hello there (.*?)|si', '', $message);

为什么不删除john214

2 个答案:

答案 0 :(得分:5)

这可能是因为你正在做一种非贪婪的方法。试试这个:

$message = preg_replace('|hello there(.*)|si', '', $message);

这将消除hello there之后的一切(因为S modifier)。但是,如果你想要的是摆脱hello there之后的单行中的所有内容,你想要摆脱s修饰符:

$message = preg_replace('|hello there(.*)|i', '', $message);

如果你使用s修饰符,你使Dot metacharacter匹配换行符,这就是为什么第一个正则表达式会消耗掉那里之后的所有内容(甚至跳到新行)。

答案 1 :(得分:2)

摆脱?和“s”:

$message = preg_replace('~hello there .*~i', '', $message);

也,“|”对于分隔符来说是一个糟糕的选择,因为“|”在regexp语言中是特殊的