替换 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。
我正在尝试将 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。