我正在重新格式化一些文字,有时我会有一个字符串,其中有一个句子没有以点结尾。
我为此目的运行了各种检查,还有一个我想要的是&#34;在新行&#34; 之前的最后一个字符后添加点。< / p>
我不确定如何为此形成正则表达式:]
$string = preg_replace("/???/", ".\n", $string);
答案 0 :(得分:4)
试试这个:
$string = preg_replace("/(?<![.])(?=[\n\r]|$)/", ".", $string);
负面后瞻(?<![.])
检查前一个字符不是.
正向前瞻(?=[\n\r]|$)
正在检查下一个字符是换行符或字符串结尾。
答案 1 :(得分:1)
<?php
$string = "Add dot after last character before new line\n";
$string = preg_replace("/(.)$/", "$1.\n", $string);
print $string;
?>
这样,点会在句子中的line
后面和\n
之前添加。
答案 2 :(得分:1)
我会这样做:
$string = "Add dot after last character before new line\n";
$string = preg_replace("/([^.\r\n])$/s", "$1.", $string);
答案 3 :(得分:0)
感谢所有答案,但他们都没有真正抓住所有情况。
我使用单词boundary regex character class:
找到了一个很好的解决方案// Add dot after every word boundary that is followed by a new line.
$string = preg_replace("/[\b][\n]/", ".\n", $string);
我猜[\b][\n]
也可以\b\n
没有方括号。
答案 4 :(得分:0)
这对我有用:
$content = preg_replace("/(\w+)(\n)/", "$1.$2", $content);
它会匹配紧跟一个新行的单词,并在其间添加一个点。
将匹配:
Hello\n
不匹配:
Hello \n
要么
Hello.\n