2012-05-10 36 views
2

我完全陌生的preg_replace,但下面的代碼從我的字符串刪除最後一個單詞:從字符串刪除最後兩個字

preg_replace('/\W\w+\s*(\W*)$/', '$1', $var); 

我想修改它,所以它刪除最後兩個字樣。

,我能想到的唯一的辦法就是用$2更換$1,但這似乎不帶任何效果,可能只是愚蠢:/

有問題的串看起來有點像這樣:

Lorem ipsum dolor sit amet. Source: LOREM 

我想刪除Source: LOREM

+2

你如何定義一個字?以及哪些字符可以分開單詞? –

+0

'$ 1'不是指數量,而是指數量。這是你的第一個匹配序列。 – Sampson

+0

@YetAnotherGeek查看我更新的問題 – Andrej

回答

7

一個簡單的正則表達式可以在一個字符串的末尾匹配的空間,隨後通過任意數量的字母(或結腸),後跟一個空格,其次是任意數量的字母:

$str = "Lorem ipsum dolor sit amet. Source: LOREM"; 
$str = preg_replace("/\s[a-z:]+\s[a-z]+$/i", "", $str); 

// Lorem ipsum dolor sit amet. 
echo $str; 

分解表達式如下:

\s  // Single space 
[a-z:]+ // Any letter, a to z, or a colon, 1 or more times 
\s  // Single space 
[a-z]+ // Any letter, a to z, 1 or more times 
$  // End of string 

演示:http://codepad.org/G22LnDDY

另外一個方法是使用explode創建字的陣列,並刪除最後兩個。

$str = "Lorem ipsum dolor sit amet. Source: LOREM"; 
$words = explode(" ", $str); 
array_splice($words, -2); 

// Lorem ipsum dolor sit amet. 
echo implode(" ", $words); 

演示:http://codepad.org/6XwqvwuP

+0

感謝所有的答案,但似乎沒有工作('來源:Lorem'沒有刪除)。它很奇怪,因爲只刪除1個單詞的代碼工作正常。它可能是一個與我的代碼有關的問題。我會繼續嘗試,如果我沒有修復它,我會用代碼片段更新我的問題。我希望它很好,如果我現在不接受任何答案。 – Andrej

+0

@Andrej上述兩種方法都有效。再次檢查您的代碼。我提供了兩個可以玩的功能演示的鏈接。 – Sampson

+0

Jonathan非常感謝你的努力。 Codepad.org看起來是一個很好的方式來測試我的整個片段!我相信我會遲早做到這一點!附:問題可能是我有多個字符串,並且我在每個循環中都使用了表達式? – Andrej

1

你不以正則表達式在這裏使用。假設你定義一個字作爲任何一個空格所包圍:

$words = explode(' ', 'Lorem ipsum dolor sit amet. Source: LOREM'); 
if (count($words) >= 2) { 
    array_pop($words); 
    array_pop($words); 
} 
$words = implode(' ', $words); 

或者:

$words = explode(' ', 'Lorem ipsum dolor sit amet. Source: LOREM'); 
if (count($words) >= 2) { 
    $words = array_slice($words, 0, count($words) - 2); 
} 
$words = implode(' ', $words); 
+0

感謝所有的答案,但似乎沒有工作('來源:Lorem'沒有刪除)。它很奇怪,因爲只刪除1個單詞的代碼工作正常。它可能是一個與我的代碼有關的問題。我會繼續嘗試,如果我沒有修復它,我會用代碼片段更新我的問題。我希望它很好,如果我現在不接受任何答案。 – Andrej

0

的$ 1,是真正用於替換的分組捕獲所以認爲它是$ N,$ N + 1 。你的正則表達式parens()中只有1個組。所以你需要第二套。如果您實際上不需要交換某些東西,則可以使用更具針對性的方法。

。*(?= \ S \ d + \ S)

應該讓你拉近了許多。 另外,對我來說,一個救生員(確實節省時間)是http://regexpal.com/ 我沒有編碼RegEx。

1
$str = ' would like to remove Source: LOREM'; 
$str = preg_replace('/(.*)\s+([a-zA-Z]+):\s+([a-zA-Z]+)$/', '$1', $str); 
echo $str; 
相關問題