[英]Remove last two words from a string
我對preg_replace
完全preg_replace
,但下面的代碼從我的字符串中刪除了最后一個單詞:
preg_replace('/\W\w+\s*(\W*)$/', '$1', $var);
我正在嘗試修改它,以便刪除最后兩個詞。
我唯一能想到的就是用$2
替換$1
,但這似乎根本沒有任何影響,可能只是愚蠢的:/
有問題的字符串看起來有點像這樣:
Lorem ipsum dolor sit amet. Source: LOREM
我想刪除Source: LOREM
一個簡單的正則表達式可以匹配一個空格,后跟任意數量的字母(或冒號),后跟一個空格,然后是字符串末尾的任意數量的字母:
$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
你不必在這里使用正則表達式。 假設您將一個單詞定義為被空格包圍的任何東西:
$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);
$str = ' would like to remove Source: LOREM';
$str = preg_replace('/(.*)\s+([a-zA-Z]+):\s+([a-zA-Z]+)$/', '$1', $str);
echo $str;
$1,實際上是用於替換的分組捕獲,因此可以將其視為 $n, $n+1。 您的正則表達式中只有 1 個組括號 ()。 所以你需要第二套。 如果您實際上不需要更換某些東西,則可以使用更有針對性的方法。
.*(?=\\s\\D+\\s)
應該讓你更接近。 另外,我的救命稻草(真的可以節省時間)是http://regexpal.com/如果沒有它,我不會編寫 RegEx。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.