2011-06-06 107 views
2

我在解决这个问题时遇到了一些麻烦。在逗号后面加上空格

我有以下的CSV字符串

hello world, hello    world, hello 

中间值有多余的空格。我正在修剪,使用

preg_replace('/()+/', ' ', $string) 

该功能是优秀的,但它也删除逗号后面的空格。它成为..

hello world,hello world,hello

我想逗号后保留1个空白像这样

hello world, hello world, hello

我怎样才能做到这一点?

编辑:

使用preg_replace('/(?<!,) {2,}/', ' ', $string);的建议,工作,但我遇到了另一个问题。当我使用超过1个空白逗号后的逗号后返回2个空格。

所以

hello world,    hello world,hello 

回报

hello world, hello world, hello 

当我创建了CSV字符串数组的解决方案,并用于implode()

$string = "hello world, hello  world,hello"; 
$val = preg_replace('/()+/', ' ', $string); 
$val_arr = str_getcsv($val); //create array 
$result = implode(', ', $val_arr); //add comma and space between array elements 
return $result; // Return the value 

现在,我得到hello world, hello world, hello这也保证了空格在逗号后如果失踪。

它似乎工作,不知道是否有更好的方法。反馈意见:)

回答

6

这将匹配2个或更多的空间在一起,并用一个单一的空间替换。逗号后面的空格不匹配。

preg_replace('/(?<!,) {2,}/', ' ', $string); 

RegExr

+0

谢谢!它的工作原理,但我遇到了另一个问题,请参阅我的编辑 – CyberJunkie 2011-06-06 02:42:11

+1

如果你摆脱检查逗号,正则表达式将完成你想要的 - preg_replace('/ {2,} /','',$ string ); – jfocht 2011-06-06 03:29:07

+0

啊我看到谢谢。 – CyberJunkie 2011-06-06 15:14:28

2

,而不是使用+量词,它匹配1个或多个空格,请使用{2}量词,这将只匹配2个或多个空格... “你好” 韩元不符合。

+0

谢谢!它的工作原理,但我遇到了另一个问题,请参阅我的编辑 – CyberJunkie 2011-06-06 02:42:19

+0

@Cyber​​Junkie:这不是这里的建议。这里的建议是简单地使用'/ {2,} /'(不含'(? trutheality 2011-06-06 06:02:08

+0

对不起,我用正则表达式很新 – CyberJunkie 2011-06-06 15:14:48

8

这对我有效。

$string = "hello world, hello  world,hello"; 
$parts = explode(",", $string); 
$result = implode(', ', $parts); 
echo $result; // Return the value 
//returns hello world, hello world, hello 

只能用逗号分解,所有额外的空白都会被删除。 然后用逗号分隔空间。