我试图用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"
。
我错过了什么?
答案 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。