2015-05-23 64 views
4

我一直在嘗試從字符串中刪除兩個標籤之間的網站部分的文本。例如:在php中使用preg_replace刪除兩個字符串之間的文本

This is CROPSTART not very CROPEND cool. 

...應該成爲這個...

This is cool. 

這是PHP我試過,通常它的工作原理:

preg_replace('#\/\/CROPSTART[\s\S]+\/\/CROPEND#', '', $string); 

然而,當字符串包含多個「CROPEND」它裁剪從CROPSTART到最後一個CROPEND的所有內容。我希望它只能在第一個CROPSTART和第一個 CROPEND之間收穫。

任何人都知道如何做到這一點?

感謝 Wonko

+0

這也許可以幫助:http://stackoverflow.com/questions/1899158/php-preg -replace-non-greedy-trouble – mmgross

+0

可能的重複[如何獲得最短的,而不是最長的正則表達式匹配preg \ _match()](http://stackoverflow.com/q/5897478) – mario

+0

是的,看起來像一個對我的欺騙,負責。也就是說,這裏提供的答案簡潔明瞭,要理解。 –

回答

12

然而,當字符串包含多個 「CROPEND」 它作物一切從CROPSTART到最後CROPEND。

這是因爲你的+運算符是貪婪 - 它不會停止在CROPEND第一個實例並繼續下去,直到它遇到的最後一個實例。

可以使用+運營商的非貪婪版本簡單地通過附加?後:

preg_replace('/CROPSTART[\s\S]+?CROPEND/', '', $string); 
相關問題