我想在带逗号的单词后添加一个空格。
它只是部分起作用。
$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没有空格。
如何解决?
答案 0 :(得分:1)
您可以提前完成。
$string = preg_replace('/(,)(?=[^\s])/', ', ', $srcString);
(,)
捕获逗号的组
(?=[^\s])
前瞻:不得在其后加上空格
答案 1 :(得分:0)
只需使用逗号而不是字母,并使用单个字母而不是“一个或多个”即可。
$string = preg_replace('/(\,)([a-zA-Z])/','$1 $2', $srcString);
答案 2 :(得分:0)
一种非正则表达式的方法,用于使用array_map
,trim
等来实现所需的功能,
<?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