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

时间:2012-05-10 20:40:37

标签: php string preg-replace

我对preg_replace完全不熟悉,但下面的代码会删除字符串中的最后一个字:

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

我正在尝试修改它,以便删除最后的两个字词。

我唯一能想到的就是用$1替换$2,但这似乎根本没有任何影响,可能只是愚蠢:/

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

Lorem ipsum dolor sit amet. Source: LOREM

我想删除Source: LOREM

4 个答案:

答案 0 :(得分: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;

分解的表达如下:

\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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

答案 3 :(得分:0)

$ 1,实际上是一个替换的分组捕获,所以把它想象为$ n,$ n + 1。你的正则表达式只有1组parens()。所以你需要第二套。如果你实际上不需要换掉一些东西,你可以使用更有针对性的方法。

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

应该让你更接近。 另外,对我来说是一个救生员(确实可以节省时间)http://regexpal.com/ 没有它我就不用编码RegEx。