2017-10-09 91 views
1

这里我有我的RegEx来代替whitespaces & newlines,用逗号替换空格和换行符

preg_replace('#\s+#',',',trim($str)); 

的代码完全适用于以下情况

$str = " 
a 
b 
c 
"; 

但是,如果我写的东西像

$str = " 
a, 
b, 
c 
"; 

$str = " 
a , 
b , 
c , 
"; 

我得到第一种情况a,,b,,c和在第二种情况a,,,b,,,c

我试过在preg_replace()之前使用strtr($str,',' => ''),但也没有工作,我怎样才能直接在preg_replace中处理这个问题?

我期望的输出是所有的值是 a, b, c, . . . .如果他们有逗号,它会逃脱或者因为它已经存在被删除,清理和和,最终只有1逗号将它们分开。

+1

你的需求量是多少? – Philipp

+1

在完美的工作中,你应该得到',a,b,c, - 是你真正想要的吗?正则表达式的事情是,他们期望有规律的东西 - 如果您的输入不规则,RegExp可能不是最佳选择。你究竟想达到什么目的? – CD001

+0

@菲利普现在在问题结尾写下它。 – AXAI

回答

1

我不是完全地肯定你的要求,但你可以尝试这些

/[\s,]+$\n|[\s,]+/gm 

或只是

/[\s,]+/ 
+0

还给逗号用逗号分隔的空格 – AXAI

+0

@AXAI第二个没有.. – Philipp

+0

其实第二个给了我逗号两倍。 – AXAI

1

一个尝试以下操作:

$arr = explode("\r\n", $str); 

array_walk($arr, function(&$item, $key) 
{ 
    $item = rtrim($item,','); 
    $item = trim($item); 
}); 

$result = trim(implode(',', $arr), ','); 


var_dump($result); 

它不是一个正则表达式解决方案,但它的工作原理。这将字符串转换为数组,删除逗号和空格,然后将数组转换回字符串并添加逗号。

+0

工作正常,但在性能的情况下,不会比平常的'preg_replace'花费更多时间吗?但斯蒂尔的作品。 – AXAI

+1

@AXAI不一定,我运行了一些基准测试,结果表明我的解决方案比preg_replace更快。 https://3v4l.org/70LPZ在某些版本和某些'preg_replace'上速度更快。 – mega6382

相关问题