2014-04-02 69 views
0

我正在重新格式化一些文本,有时我有一个字符串,其中有一个句子不是以点结尾的。正则表达式在字符之后插入点(。),在新行之前

我正在为此目的运行各种检查,并且我还想要一个“在新行之前的最后一个字符之后添加点”

我不知道如何形成的正则表达式是:]

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

给一个例子字符串 –

回答

2

试试这个:

$string = preg_replace("/(?<![.])(?=[\n\r]|$)/", ".", $string); 

负回顾后(?<![.])在检查前一个字符是不是.

肯定lookahead (?=[\n\r]|$)检查下一个字符是换行符还是字符串末尾。

+0

那个人做了这个伎俩,thx阿米戈! –

+0

你会怎么做,但使用re.sub? (?= [\ n \ r] | $)/“,”。“,$ string); – Silas

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

+0

在换行之前试用'$ string ='。'' –

+0

这会在最后加上一个'\ n'。 – Toto

1

我会怎么做:

$string = "Add dot after last character before new line\n"; 
$string = preg_replace("/([^.\r\n])$/s", "$1.", $string); 
+0

很好。我认为它也处理空行。 –

0

感谢所有的答案,但他们没有真正吸引所有方案的权利。

我用这个词边界正则表达式字符类摸索我的方式很好的解决:

// Add dot after every word boundary that is followed by a new line. 
$string = preg_replace("/[\b][\n]/", ".\n", $string); 

我想[\b][\n]也可以同样是\b\n方括号。

相关问题