正则表达式在字符串中的每个数字序列后添加逗号

时间:2010-11-15 19:24:10

标签: php regex

我想要一个正则表达式或其他东西来循环字符串中的所有数字并在它们之后添加逗号。但如果已有逗号,则不应该这样做。

示例:

$string="21 Beverly hills 90010, CA";

输出:

$string="21, beverly hills 90010, CA";

由于

5 个答案:

答案 0 :(得分:3)

你可以做到

$string = preg_replace('/(?<=\d\b)(?!,)/', ',', $string);

<强>解释

(?<=\d\b) # Assert that the current position is to the right of a digit
          # and that this digit is the last one in a number 
          # (\b = word boundary anchor).
(?!,)     # Assert that there is no comma to the right of the current position

然后只需在此位置插入逗号即可。完成。

这不会在数字和字母之间插入逗号(它不会将21A Broadway更改为21,A Broadway),因为\b仅匹配字母数字和非字母数字字符。如果您确实需要,请改用/(?<=\d)(?![\d,])/

答案 1 :(得分:1)

占有量词(++)和否定前瞻应该可以解决问题:

$string="21 Beverly hills 90010, CA";

echo preg_replace('/\d++(?!,)/', '$0,', $string);

答案 2 :(得分:0)

你必须要小心你的输入是什么,因为这可能会产生一些字符串的意外结果。

preg_replace('/([0-9])(\s)/', '$1,$2', $string);

编辑以回应下面的评论 - 如果你的号码不一定跟着空格,这是一个版本。结果可能更加出乎意料。

preg_replace('/([0-9])([^,0-9])/', '$1,$2', '21 Beverly hills 90010, CA');

答案 3 :(得分:0)

如果数字后跟空格,则可能会有效。

$string = preg_replace('/(\d+)(\s)/', '$1,$2', $string);

答案 4 :(得分:0)

我会把它分成两步。首先,删除数字后的所有现有逗号。其次,在所有数字后添加逗号。

$string = preg_replace('/([0-9]+),/', '$1', $string);
$string = preg_replace('/([0-9]+)/', '$1,', $string);