PHP正则表达式删除多个?标记

时间:2008-09-25 22:38:43

标签: php regex escaping

我无法找到正确的正则表达式字符串来删除多个序列?字符。我想替换多个顺序?有一个?,但哪些角色逃脱......正在逃避我。

示例输入:

  

这件事是吗???或者什么???

期望的输出:

  

这件事开始了吗?或者什么?

我在PHP中使用preg_replace()

7 个答案:

答案 0 :(得分:9)

preg_replace('{\?+}', '?', 'Is this thing on??? or what???');

也就是说,你只需要转义问号,“\?+”中的加号意味着我们用一个或多个字符替换每个实例,但我怀疑“\?{2,}”可能是甚至更好,更有效(用两个或更多个问号字符替换每个实例。

答案 1 :(得分:2)

preg_replace( '{\\?+}', '?', $text );

应该这样做。

你需要用反斜杠转义问号本身,然后用另一个反斜杠转义反斜杠本身。

在这种情况下,C#的verbatim strings很不错。

答案 2 :(得分:1)

这应该有效(我已经测试过了):

preg_replace('/\?+/', '?', $subject);

答案 3 :(得分:1)

preg_replace('/\?{2,}/','?',$text)

答案 4 :(得分:1)

这应该做到

preg_replace('/(\?+)/m', '?', 'what is going in here????');

问号需要转义,m代表多线模式。

这是一个很好的网站,可以在http://regex.larsolavtorvik.com/

进行试用

答案 5 :(得分:0)

您是否尝试过模式

[?]+

替换?

答案 6 :(得分:0)

str_replace('??', '?', 'Replace ??? in this text');