Если у меня есть строка вроде этого:
$subject = "This is just a test";
Я хочу найти первое слово, а затем удалить его из $subject
в PHP. Я использую preg_match
чтобы получить первое слово, но могу ли я использовать одну операцию, чтобы удалить ее?
preg_match('/^(\w+)/', trim($subject), $matches);
После сопоставления моего первого слова строка должна быть
$subject = "is just a test";
и $matches
должны содержать первое слово
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