Thomas Owens Thomas Owens - 1 year ago 60
PHP Question

What is wrong with this PHP regular expression?

$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

I'm trying to replace all alphabetical character followed by one or more whitespace characters (tabs and/or spaces) followed by one or more numerical characters followed by a semicolon with the alphabetical character followed by a comma followed by the numerical digits and then the semicolon.

I'll provide an example:


hello world 1007;


hello world,1007;

Answer Source

The two | at the start and end probably are incorrect - and should both be forward-slashes.

All other forward slashes should be backward slashes (and need escaping).

And since PHP 4.04 $n is the preferred way of referring to a capture group.

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);

If you use single quotes you don't need to escape your backslashes:

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);