Сопоставьте первое слово, а затем удалите его из строки с помощью PHP

Если у меня есть строка вроде этого:

$subject = "This is just a test"; 

Я хочу найти первое слово, а затем удалить его из $subject в PHP. Я использую preg_match чтобы получить первое слово, но могу ли я использовать одну операцию, чтобы удалить ее?

 preg_match('/^(\w+)/', trim($subject), $matches); 

После сопоставления моего первого слова строка должна быть

 $subject = "is just a test"; 

и $matches должны содержать первое слово

Solutions Collecting From Web of "Сопоставьте первое слово, а затем удалите его из строки с помощью PHP"

Preg_match может захватить, preg_replace может заменить. Я бы использовал preg_replace_callback , http://php.net/manual/en/function.preg-replace-callback.php , чтобы сохранить ваше значение и заменить оригинал. Я также немного изменил ваше регулярное выражение, вы можете поменять его обратно на \w если найдете, что это лучше. Это позволит начать линию с - and 0-9 хотя это не обязательно слово.

 <?php $subject = "This is just a test"; preg_replace_callback('~^([AZ]+)\s(.*)~i', function($found) { global $subject, $matches; $matches = $found[1]; $subject = $found[2]; }, $subject); echo $subject . "\n"; echo $matches; 

Вывод:

просто испытание
Эта

Как и ответ Криса, мой метод основан на том факте, что в подстроке, разделенной одним пространством, будет не менее двух слов.

Код: ( Демо )

 $subject = "This is just a test"; $halves=explode(' ',$subject,2); // create a two-element(maximum) array $first=array_splice($halves,0,1)[0]; // assign first element to $first, now $halves is a single, reindexed element $subject=$halves[0]; echo "First=$first and Subject=$subject"; // output: First=This and Subject=is just a test 

Или вы могли бы просто использовать этот однострочный слой:

 list($first,$subject)=explode(' ',$subject,2); // limit the number of matches to 2 

Или

 echo "First=",strstr($subject,' ',true)," and Subject=",ltrim(strstr($subject,' ')); 

Или

 echo "First=",substr($subject,0,strpos($subject,' '))," and Subject=",substr($subject,strpos($subject,' ')+1); 

Если вам особенно нужно решение регулярных выражений по какой-то сумасшедшей причине, preg_split() работает так же, как explode() :

Код: ( Демо )

 $subject = "This is just a test"; list($first,$subject)=preg_split('/ /',$subject,2); // limit the number of matches to 2 echo "First=$first and Subject=$subject"; // output: First=This and Subject=is just a test