簡體   English   中英

從字符串中刪除最后兩個單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM