2017-01-16 63 views
1

$reg1 = preg_replace('/(?<!\d),(?=\s+\d)/', '', $text); $reg2 = preg_replace('/,\s*$/', '', $reg1); $reg3 = preg_replace('/\s\s+/', ' ', $reg2);将多个正则表达式为一个逗号去除

我有这三个正则表达式替换调用。我可以将它们合并为一个吗? 第一个在字符串之后和数字之前删除逗号。 第二个在最后删除逗号。 第三个修剪空白。

+0

请添加一些示例输入字符串和预期结果。 – Toto

+0

您是否需要将它们合并在一起?表现痛苦?为了简化第二个正则表达式,你可以试试'rtrim($ reg1,',');'。我无法很好地读取正则表达式,但第三个可以使用'trim($ reg2);'。如果一个字符串看起来像这样,你需要发生什么',一个令人惊讶的字符串会让你的第10天搞砸,'? – MonkeyZeus

+0

''hulk,33,'=>'hulk 33'' ''test 3','=>'test 3' –

回答

0

你可以通过所有三preg_replace

$patterns = array('/(?<!\d),(?=\s+\d)/', '/,\s*$/', '/\s\s+/'); 
$replacements = array('', '', ' '); 

$result = preg_replace($patterns, $replacements, $text); 
2

前两个可以等组合:

​​
1

由于不同的替换值,你只能组你的第2正则表达式与一个“或”条件。 preg_replace也允许多个替换,所以你可以传递第三个正则表达式作为单独的参数。

$result = preg_replace(array('/((?<!\d),(?=\s+\d))|(,\s*$)/', '(\s\s+)'), array('', ' '), $text);