2013-04-01 62 views
0

我有類似下面,我需要運行上的preg_replace內容:PHP的preg_replace有特殊字符

Test Title| 
test content 

John's title - has a hyphen| 
john's content 

Last one... I promise| 
last content 

我使用上的內容下面的preg_replace正則表達式來獲得在結束所有行「|」並用標籤包裹它。

preg_replace("/([a-zA-Z][a-zA-Z-'\,-\d\s\w]+\|)/", '<h3 id="${1}">${1}</h3>', $content); 

我遇到的問題是,正則表達式不抓住連字符或省略號。我從另一位開發人員那裏繼承了這段代碼,所以我非常願意把它重新編譯並重新開始,但是如果可以的話,我想盡量讓它工作。

回答

0

可以簡化您的正則表達式位: preg_replace("/([^|\n\r]+\|\n)/", '${1}', $content);

+0

這並獲得成功的感謝! – micahmills

0

連字符不會被轉義,正則表達式不會掃描句點。

/([a-zA-Z][a-zA-Z-'\,\.\-\d\s\w]+\|)/應該工作。

1

該正則表達式只是似乎有很多不必要的問題。正如奧塔拉所說的那樣,傳染病並沒有逃脫,管道也沒有逃脫,也沒有尋找時間。它也有兩個連字符的檢查。

你應該簡單地尋找所有非管道字符,直到達到管簡化它:

preg_replace("/([^|\r\n]+)\|/", '<h3 id="${1}">${1}</h3>', $content);