在PHP中替换标点符号周围的空格

时间:2015-01-12 18:51:09

标签: php preg-replace removing-whitespace

我试图用PHP中的标点符号替换尾随空格,并使用匹配的标点符号后跟单个空格。

例如"Hello , I am here ! Not anymore. .. "应该变为"Hello, I am here! Not anymore... "。我试图使用带引用的正则表达式

PHP

$string = preg_replace('/\s*[[:punct:]]\s*/', '$2 ', $string);

但该代码段移除了标点:"Hello I am here Not anymore"
我错过了什么?

3 个答案:

答案 0 :(得分:1)

这应该适合你:

<?php

    $string = "Hello  , I am here   ! Not anymore. ..  ";
    echo $string = preg_replace('/(\s*)([[:punct:]])(\s*)/', '$2 ', $string);

?>

输出:

Hello, I am here! Not anymore. . .

答案 1 :(得分:1)

您没有捕获任何内容,然后尝试替换不存在的第二个捕获组。尝试使用捕获组(),然后使用它$1

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

答案 2 :(得分:1)

为了将. . .替换为...,这就是我要做的事情:

$string = "Hello  , I am here   ! Not anymore. . .  ";
$string = preg_replace('/\s+(?=\pP)|(?<=\pP\s)\s+/', '', $string);
echo $string;

<强>输出:

Hello, I am here! Not anymore...

\pP是标点符号的unicode属性,see the doc (?= )是一个积极的展望 (?<= )背面有{{1}},see the doc