$reg1 = preg_replace('/(?<!\d),(?=\s+\d)/', '', $text);
$reg2 = preg_replace('/,\s*$/', '', $reg1);
$reg3 = preg_replace('/\s\s+/', ' ', $reg2);
我有三个正则表达式替换调用。我能把它们合二为一吗? 第一个删除字符串之后和数字之前的逗号。 第二个删除末尾的逗号。 第三个修剪空白。
答案 0 :(得分:2)
前两个可以合并为:
$reg1 = preg_replace('/(?<!\d),\s*(?=\d|$)/', '', $text);
答案 1 :(得分:1)
由于替换值不同,您只能将前2个正则表达式与“或”条件分组。 preg_replace
也允许多次替换,因此您可以将第3个正则表达式作为单独的参数传递。
$result = preg_replace(array('/((?<!\d),(?=\s+\d))|(,\s*$)/', '(\s\s+)'), array('', ' '), $text);
答案 2 :(得分:0)
您可以将所有三个传递给preg_replace
:
$patterns = array('/(?<!\d),(?=\s+\d)/', '/,\s*$/', '/\s\s+/');
$replacements = array('', '', ' ');
$result = preg_replace($patterns, $replacements, $text);