从字符串中删除前两个单词。

4

我有一个字符串:

$string = "R 124 This is my message";

有时候,字符串可能会发生变化,例如:
$string = "R 1345255 This is another message";

使用PHP,最好的方法是如何删除前两个“单词”(例如,最初的“R”,然后是随后的数字)?

谢谢帮助!

5个回答

16
$string = explode (' ', $string, 3);
$string = $string[2];

必须比正则表达式快得多。


第二行字符串索引中的错别字已经修正(原本是3而不是2)。 - Ilya Birman

6
一种方法是将字符串按“单词”分割,可以使用explodepreg_split(取决于单词分隔符的复杂性:它们总是一个空格吗?) 例如:
$string = "R 124 This is my message";
$words = explode(' ', $string);
var_dump($words);

你会得到这样一个数组:
array
  0 => string 'R' (length=1)
  1 => string '124' (length=3)
  2 => string 'This' (length=4)
  3 => string 'is' (length=2)
  4 => string 'my' (length=2)
  5 => string 'message' (length=7)

然后,使用array_slice函数,你可以只保留你想要的单词(而不是前两个):

$to_keep = array_slice($words, 2);
var_dump($to_keep);

这将提供:

array
  0 => string 'This' (length=4)
  1 => string 'is' (length=2)
  2 => string 'my' (length=2)
  3 => string 'message' (length=7)

最后,你将所有的部件组合起来:

$final_string = implode(' ', $to_keep);
var_dump($final_string);

这会导致...

string 'This is my message' (length=18)

并且,如果必要的话,它允许你在将单词拼接在一起之前进行一些操作 :-)
实际上,这就是为什么你可能会选择这个解决方案的原因,它比仅使用explode和/或preg_split要长一点^^


5

尝试

$result = preg_replace('/^R \\d+ /', '', $string, 1);

或者(如果您希望您的空格以更可见的样式书写)
$result = preg_replace('/^R\\x20\\d+\\x20/', '', $string, 1);

谢谢Jacco,这正是我在寻找的。对于Pascal的+1,因为其中有一些对我很有用的“教学”信息! - Dodinas
如果有人使用双倍行距,这可能会稍微失败,我建议使用以下代码:$result = preg_replace('/^R\s\d+\s/', '', $string, 1); - Mez

0
$string = preg_replace("/^\\w+\\s\\d+\\s(.*)/", '$1', $string);

0
$string = preg_replace('/^R\s+\d+\s*/', '', $string);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接