从字符串中删除最后两个单词

r0s*_*kar 2 php string preg-replace

我是全新的preg_replace,但下面的代码删除了我的字符串中的最后一个字:

preg_replace('/\W\w+\s*(\W*)$/', '$1', $var);
Run Code Online (Sandbox Code Playgroud)

我试图修改它,以便删除最后两个单词.

我能想到的唯一的办法就是更换$1使用$2,但这似乎不带任何效果,可能只是愚蠢:/

有问题的字符串看起来像这样:

Lorem ipsum dolor sit amet. Source: LOREM
Run Code Online (Sandbox Code Playgroud)

我想删除 Source: LOREM

Sam*_*son 8

一个简单的正则表达式可以匹配一个空格,后跟任意数量的字母(或冒号),后跟一个空格,后跟字符串末尾的任意数量的字母:

$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;
Run Code Online (Sandbox Code Playgroud)

分解的表达如下:

\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
Run Code Online (Sandbox Code Playgroud)

演示: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 );
Run Code Online (Sandbox Code Playgroud)

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