Reputation: 19137
I'm having trouble coming up with the correct regex string to remove a sequence of multiple ? characters. I want to replace more than one sequential ? with a single ?, but which characters to escape...is escaping me.
Example input:
Is this thing on??? or what???
Desired output:
Is this thing on? or what?
I'm using preg_replace() in PHP.
Upvotes: 5
Views: 4622
Reputation: 76591
this should do it
preg_replace('/(\?+)/m', '?', 'what is going in here????');
the question mark needs to be escaped and the m is for multiline mode.
This was a good web site to try it out at http://regex.larsolavtorvik.com/
Upvotes: 1
Reputation: 176675
This should work (I have tested it):
preg_replace('/\?+/', '?', $subject);
Upvotes: 1
Reputation: 48369
preg_replace( '{\\?+}', '?', $text );
should do it.
You need to escape the question mark itself with a backslash, and then escape the backslash itself with another backslash.
It's situations like this where C#'s verbatim strings are nice.
Upvotes: 2
Reputation: 10420
preg_replace('{\?+}', '?', 'Is this thing on??? or what???');
That is, you only have to escape the question mark, the plus in "\?+" means that we're replacing every instance with one or more characters, though I suspect "\?{2,}" might be even better and more efficient (replacing every instance with two or more question mark characters.
Upvotes: 10