RegEx-用逗号在单词后添加空格

时间:2020-01-22 14:26:41

标签: php regex

我想在带逗号的单词后添加一个空格。

它只是部分起作用。

$srcString = "AA,BB,CC, DD, EE";


// Variant A
$string = preg_replace('/(\D)(\,)(\D)/','$1, $3', $srcString);

// Variant B
//$string = preg_replace('/([a-zA-Z]+)(\,)([a-zA-Z]+)/','$1, $3', $srcString);


echo '<pre>';
echo 'Source: ' . $srcString;
echo '</pre>';

echo '<pre>';
echo 'Target: ' . $string;
echo '</pre>';

使用变体A,结果如下所示:
资料来源:AA,BB,CC,DD,EE
对象:AA,BB,CC,DD,EE
这是DD和EE之前的两个空格。

使用变体B,结果如下所示:
资料来源:AA,BB,CC,DD,EE
对象:AA,BB,CC,DD,EE
看起来不错,但BB,CC没有空格。

如何解决?

3 个答案:

答案 0 :(得分:1)

您可以提前完成。

$string = preg_replace('/(,)(?=[^\s])/', ', ', $srcString);

(,)捕获逗号的组

(?=[^\s])前瞻:不得在其后加上空格

答案 1 :(得分:0)

只需使用逗号而不是字母,并使用单个字母而不是“一个或多个”即可。

$string = preg_replace('/(\,)([a-zA-Z])/','$1 $2', $srcString);

答案 2 :(得分:0)

一种非正则表达式的方法,用于使用array_maptrim等来实现所需的功能,

<?php
$srcString = "AA,BB,CC,  DD, EE"; #varient 1
#$srcString = "AA,BB,CC, DD, EE"; #varient 2
#$srcString = "AA,BB,CC, DD,  EE"; #varient 3
$result = array_map('trim',explode(',',$srcString));
echo implode(', ', $result);
?>

工作演示: https://3v4l.org/e6GJf