正则表达式在新行之前插入字符后的点(。)

时间:2014-04-02 10:23:07

标签: php regex

我正在重新格式化一些文字,有时我会有一个字符串,其中有一个句子没有以点结尾。

我为此目的运行了各种检查,还有一个我想要的是&#34;在新行&#34; 之前的最后一个字符后添加点。< / p>

我不确定如何为此形成正则表达式:]

$string = preg_replace("/???/", ".\n", $string);

5 个答案:

答案 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之前添加。

演示:http://ideone.com/J4g7tH

答案 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