Reputation: 116169
$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:
Start:
hello world 1007;
End:
hello world,1007;
Upvotes: 2
Views: 439
Reputation: 56853
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);
Upvotes: 6
Reputation: 166046
You want backslashes in the regular expression, not forward slashes. The starting and ending pipes are needed (or another delimiter for the regex)
$x = "hello world 1007;";
echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x);
echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x);
echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x);
Upvotes: 1
Reputation: 8674
Should those forward-slashes be backslashes? You'll need to escape them for PHP too unless you change your double-quotes to single-quotes.
Upvotes: 3