Php 在换行符之后或之前删除三个点
我使用此函数删除换行前后的三个点:Php 在换行符之后或之前删除三个点,php,regex,Php,Regex,我使用此函数删除换行前后的三个点: private function trimThreeDots(string $text): string { $threeDotsAtTheBeginning = '((^|[\n]{1})[\\.]{3})'; $threeDotsAtTheEnd = '([\\.]{3}[\n]{1})'; $pattern = '/' . $threeDotsAtTheBeginning . '|' . $threeDotsAtTheEnd .
private function trimThreeDots(string $text): string {
$threeDotsAtTheBeginning = '((^|[\n]{1})[\\.]{3})';
$threeDotsAtTheEnd = '([\\.]{3}[\n]{1})';
$pattern = '/' . $threeDotsAtTheBeginning . '|' . $threeDotsAtTheEnd . '/';
return preg_replace_callback($pattern, function ($str) {
return str_replace("...", "", $str[0]);
}, $text);
}
它可以工作,但如果我有一个像这样的字符串:
"Bla bla bla...
...bla bla bla"
我只有一根火柴。但是我想得到两个匹配项,因为我需要删除三个点的两个匹配项。我想知道是否有一种更直接有效的方法来编写这个正则表达式,并在上述情况下获得两个匹配项?您可以使用
$s = "Bla bla bla...
...bla bla bla";
echo preg_replace('~(?:\.{3})?(\R)(?:\.{3})?~', '$1', $s);
请参阅和
详细信息
-3个点的可选序列(?:\.{3})
-第1组:任何换行顺序(\R)
-3个点的可选序列(?:\.{3})
$1
替换使用正则表达式匹配的确切换行顺序替换匹配项。您可以使用正则表达式
匹配换行符在点之后的情况\.{3}(?=\n)
无法完成此任务。第二个参数是要修剪的字符列表。请参见列表中可能只包含一个字符,一个点。这将删除任何数量的前导/尾随点。请尝试此(?似乎太复杂了,也许吧? 这个怎么样
$re = '/(^\.{3}|\.{3}$)/gm'; $str = 'Bla bla bla... ...bla bla bla'; $subst = ''; $result = preg_replace($re, $subst, $str); echo "The result of the substitution is ".$result;
您不需要正则表达式,只需将新行字符放在<代码> StryRePoT()/Case>源字符串中。没有ReGEX,我会考虑分割成行,<代码> Times()/代码>点,必要时重新连接。@ ANDYG <代码>三()
不需要“\h*”因为我不会删除这三个点,以防换行后或换行前有空格。但其余的都可以,谢谢。@RamyAlZuhouri那么为什么要在你的回显修剪(“bla-bla-bla…,”);
模式中使用'([\\.]{3}[\s]*[\n]{1})
呢?好的,既然这是你的模式错误,我删除了\s*
部分。\h*
$re = '/(^\.{3}|\.{3}$)/gm'; $str = 'Bla bla bla... ...bla bla bla'; $subst = ''; $result = preg_replace($re, $subst, $str); echo "The result of the substitution is ".$result;