0

以简单的方式使用 php regexp,是否可以修改字符串以在单词后面的逗号和句点后添加空格,但不能在逗号或句点前后添加一个数字,例如 1,000.00?

String,looks like this with an amount of 1,000.00

需要改成...

String, looks like this with an amount of 1,000.00

这当然应该允许多个实例......这是我现在使用的,但它导致数字返回为 1, 000. 00

$punctuation = ',.;:';
$string = preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string);
4

3 回答 3

1

你可以'/(?<!\d),|,(?!\d{3})/'', '.

就像是:

$str = preg_replace('/(?<!\d),|,(?!\d{3})/', ', ', $str);
于 2012-08-26T01:08:03.607 回答
0

我正在寻找这个正则表达式。

这篇文章对我很有帮助,我改进了 Qtax 提出的解决方案。

这是我的:

$ponctuations = array(','=>', ','\.'=>'. ',';'=>'; ',':'=>': ');
foreach($ponctuations as $ponctuation => $replace){
    $string = preg_replace('/(?<!\d)'.$ponctuation.'(?!\s)|'.$ponctuation.'(?!(\d|\s))/', $replace, $string);
}

使用此解决方案,“sentence like: this”将不会更改为“sentence like: this”(带有 2 个空格)

就这样。

于 2013-11-15T10:27:04.520 回答
0

虽然这已经很老了,但我一直在寻找同样的问题,在理解了给出的解决方案后,我得到了不同的答案。

这个正则表达式不是检查逗号之前的字符,而是检查逗号之后的字符,因此它可以限制为字母字符。此外,这不会创建逗号后有两个空格的字符串。

$punctuation = ',.;:';
$string = preg_replace("/([$punctuation])([a-z])/i",'\1 \2', $string);

测试脚本可以在这里检查。

于 2020-07-08T21:24:46.573 回答