2014-04-02 112 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方括號。

相關問題