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

Replace spaces around punctuation in PHP

我正在尝试将 PHP 中标点符号周围的尾随 space 替换为匹配的标点符号,后跟单个 space。

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

PHP

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

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

这应该适合你:

<?php

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

?>

输出:

Hello, I am here! Not anymore. . .

您没有捕获任何内容,然后尝试替换为不存在的第二个捕获组。尝试捕获组 () 然后使用它 </code>:</p> <pre><code>$string = preg_replace('/\s*([[:punct:]])\s*/', ' ', $string);

为了用 ... 替换 . . .,我会这样做:

$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.
(?= ) 是积极的展望
(?<= )积极的回头看,see the doc