davr
davr

Reputation: 19137

PHP regex to remove multiple ?-marks

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

Answers (7)

David Lay
David Lay

Reputation: 2955

Have you tried the pattern

[?]+

with the replacement of ? ?

Upvotes: 0

powtac
powtac

Reputation: 41050

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

Upvotes: 0

Xian
Xian

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

Markus Jarderot
Markus Jarderot

Reputation: 89171

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

Upvotes: 1

Paige Ruten
Paige Ruten

Reputation: 176675

This should work (I have tested it):

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

Upvotes: 1

Rob
Rob

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

pilsetnieks
pilsetnieks

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

Related Questions