【发布时间】:2018-06-01 09:56:29
【问题描述】:
我正在重新格式化一些文本,有时我有一个字符串,其中有一个不以点结尾的句子。
为此,我正在运行各种检查,我还想要“在换行之前的最后一个字符后添加点”。
我不确定如何为此形成正则表达式:]
$string = preg_replace("/???/", ".\n", $string);
【问题讨论】:
-
举个例子字符串
我正在重新格式化一些文本,有时我有一个字符串,其中有一个不以点结尾的句子。
为此,我正在运行各种检查,我还想要“在换行之前的最后一个字符后添加点”。
我不确定如何为此形成正则表达式:]
$string = preg_replace("/???/", ".\n", $string);
【问题讨论】:
试试这个:
$string = preg_replace("/(?<![.])(?=[\n\r]|$)/", ".", $string);
负向查看(?<![.]) 正在检查前一个字符不是.
正向预测 (?=[\n\r]|$) 正在检查下一个字符是换行符还是字符串结尾。
【讨论】:
我想是这样的:
<?php
$string = "Add dot after last character before new line\n";
$string = preg_replace("/(.)$/", "$1.\n", $string);
print $string;
?>
这样,句中的单词line之后和\n之前会添加点。
【讨论】:
$string = "before new line."
\n。
我愿意:
$string = "Add dot after last character before new line\n";
$string = preg_replace("/([^.\r\n])$/s", "$1.", $string);
【讨论】:
感谢所有答案,但没有一个人真正抓住了所有场景。
我使用单词边界正则表达式字符类摸索了一个好的解决方案:
// Add dot after every word boundary that is followed by a new line.
$string = preg_replace("/[\b][\n]/", ".\n", $string);
我猜[\b][\n] 也可以是不带方括号的\b\n。
【讨论】:
这对我有用:
$content = preg_replace("/(\w+)(\n)/", "$1.$2", $content);
它会匹配一个紧跟新行的单词,并在其间添加一个点。
将匹配:
Hello\n
不匹配:
Hello \n
或者
Hello.\n
【讨论】: