Aloysia de Argenteuil
Aloysia de Argenteuil

Reputation: 892

Using preg_replace to modify first space, but not inside a group of words using PHP

I would like to replace commas and potential spaces (i.e. that user can type or not) of an expression using preg_replace.

$expression = 'alfa,beta, gamma gmm,   delta dlt,    epsilon psln';

but I was unable to format the output as I want:

'alfa|beta|gamma gmm|delta dlt|epsilon psln'

Amongst others I tried this:

preg_replace (/,\s+/, '|', $expression);

and although it was the closest I got, it's not yet right. With code above I receive:

alfa,beta|gamm|gmm|delt|dlt|epsilo|psl|

Then I tried this (with | = OR):

preg_replace (/,\s+|,/, '|', $expression);

and although I solved the problem with the comma, it is still wrong:

alfa|beta|gamm|gmm|delt|dlt|epsilo|psl|

What should I do to only delete space after comma and not inside the word-group?

Many thanks in advance!

Upvotes: 0

Views: 134

Answers (2)

How about using regular PHP functions to achieve this?

<?php

$expression = 'alfa,beta, gamma gmm,   delta dlt,    epsilon psln';

$pieces = explode(',', $expression);
foreach($pieces as $k => $v)
  $pieces[$k] = trim($v);
$result = implode('|', $pieces);

echo $result;

?>

Output:

alfa|beta|gamma gmm|delta dlt|epsilon psln

This will distinguish between spaces at start/end of piece and spaces in pieces.

Upvotes: 1

Avinash Raj
Avinash Raj

Reputation: 174696

Use ,\s* instead of ,\s+ and replace the matched characters with | symbol. If you use ,\s+, it matches the commas and the following one or more spaces but it forgot the commas which are alone. By making the occurrence of spaces to zero or more times, it would also match the commas which are alone.

DEMO

Code:

<?php
$string = 'alfa,beta, gamma gmm,   delta dlt,    epsilon psln';
$pattern = "~,\s*~";
$replacement = "|";
echo preg_replace($pattern, $replacement, $string);
?>

Output:

alfa|beta|gamma gmm|delta dlt|epsilon psln

Upvotes: 3

Related Questions