我对preg_replace
完全不熟悉,但下面的代码会删除字符串中的最后一个字:
preg_replace('/\W\w+\s*(\W*)$/', '$1', $var);
我正在尝试修改它,以便删除最后的两个字词。
我唯一能想到的就是用$1
替换$2
,但这似乎根本没有任何影响,可能只是愚蠢:/
有问题的字符串看起来像这样:
Lorem ipsum dolor sit amet. Source: LOREM
我想删除Source: LOREM
答案 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 );
答案 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。