2015-09-30 23 views
0

我想用PHP來製作一種麪包屑。 (我見過一些交鑰匙解決方案,但它們完全不符合我的需求) 我需要從結尾(向後)修剪一個字符串,直到第二次出現»。我嘗試過貪婪/懶惰的表情,不同組合的量詞,但都是徒勞的。該字符串或者保持未修剪或切到最後(從結尾開始計算)»。需要你的幫助!需要從結尾(向後)修剪一個字符串,直到出現第二個表達式

這一次修剪到最後出現:

<?php 
$foo = 'First Text &raquo; Second text &raquo; Third text &raquo; Maybe Forth text &raquo; ' ; 
if ($thisFolder == "index"){ 
echo preg_replace('/(&raquo;(.+?)&raquo;)? $/', '', $foo); 
} 
?> 

回答

1

你並不需要一個正則表達式:

$parts = explode('&raquo;', $foo); 
$result = implode('&raquo;', array_slice($parts, 0, -2)); 
+0

謝謝,卡西米爾和希波呂特。你的代碼對我很好,不像正則表達式那樣,它不會刪除First Text。 – Ken

1

最簡單的方法是將整個線路匹配,並使用第一部分爲$replacement

$foo = 'First Text &raquo; Second text &raquo; Third text &raquo; Maybe Forth text &raquo; ' ; 
echo preg_replace('/^(.*)(?:&raquo;.*){2}/', '$1', $foo); 

這裏,第一.*優先,消耗盡可能它可以(貪婪)。

$1反向引用第一組匹配的部分,用作替換。

+0

謝謝,馬里亞諾。該代碼的作品,只是如果我只留下第一個文本,它也將被修剪,但在我的情況下,這並不重要。 – Ken

+0

很高興它適合你。如果文本中沒有至少兩個'»',那麼它不會修剪......並且記住正則表達式總是比較慢,@ ​​casimirethippolyte的回答應該快40%,如果這對您來說很重要,它會修剪整個文本如果沒有2個分隔符。 – Mariano

相關問題