我试图让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
?
答案 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语言中是特殊的