2011-03-21 20 views
2

I just answered a question here,這讓我問自己的問題。我可以使用preg_replace去除多行模式下的尾部 n嗎?

基本上,OP想要刪除任何行,如果它包含一個字符串。這裏是我想出了一個正則表達式...

$str = preg_replace('/^.*\b["(]?hello["(]?\b.*$/m', '', $str); 

它的偉大工程,但更換時,因爲$比賽後\n之前,他們仍然有空白行,例如

string(90) " 
What it shouldhello do is: 


could be words in between brackets and inverted commas also." 

,因爲我在多模式(至少我是這樣認爲),我不能使用\z

如果我使用s修飾符,那麼.會變得太貪婪,並且不能跨越換行符。

我試了幾件事(如[^\n][\s\S]),現在我很難過。

我該如何在尾部\n這裏匹配所以它被刪除與替換?

謝謝。

回答

2

使用\ n而不是$。

$str = preg_replace('/^.*\b["(]?hello["(]?\b.*\n/m', '', $str); 

這錯過了最後一行,如果它有你好,所以這裏再進一步。

$str = preg_replace('/^.*\b["(]?hello["(]?\b.*(\n|$)/m', '', $str); 

現在的問題是最後一行被刪除,但仍然有\ n字符(類似的問題,你已經有)。

注意:我根本不是正則表達式專家,只是通常可以滿足我的需求。

+0

除了這將錯過最後一行,如果它有你好在其中:S – Jacob 2011-03-21 13:26:59

+0

爲+1,我想我太* * * * *爲我自己的好:) – alex 2011-03-21 13:32:05

0

請試試這個:

$str = preg_replace('/^.*?\b["(]?hello["(]?\b.*?$/s', '', $str); 

.*?使它非貪婪。

+0

這沒有工作對不起,它只是取代了整個字符串與一個空字符串。 – alex 2011-03-21 13:30:22

1

我覺得挺傻不搞清楚這一個,但我用Jacob's answer爲基礎...

$str = preg_replace('/^.*\b["(]?hello["(]?\b.*\n?/m', '', $str); 

貌似我只是太熱衷使用線錨結束。

這一個最後允許可選\n。它也在最後一個非匹配行的末尾留下了\n,但我始終可以使用trim($str)

+0

與我的問題具有相同的問題,因爲我的編輯...最後一行:S – Jacob 2011-03-21 13:32:50

相關問題