Regex - слово, следующее за другим словом - PullRequest
0 голосов
/ 24 мая 2018

У меня есть приложение PHP, и я хотел бы получить строку «слово» после другого слова.За ней могут следовать другие строки.

  1. Здравствуйте, это статус: хорошо
  2. Здравствуйте, это статус: хорошо.
  3. Здравствуйте, это статус:хорошо и мне это нравится

Я бы хотел получить статус "ok" .Как это сделать, пожалуйста?

У меня есть:

preg_match('~status:\s(.*)(?=\s.*)?~', $text, $matches);

Но это возвращает все после статуса: .

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Вы можете просто заменить (.*) на (\w*):

preg_match('~status:\s(\w*)~', $text, $matches);

Демо

Другой способ исправить ваш текущий подходбыло бы сделать точку в (.*) ленивой, а затем также внести небольшие изменения в ваш текущий прогноз:

preg_match('~status:\s(.*?)(?=\s|$)~', $text, $matches);
0 голосов
/ 24 мая 2018

Вы можете спросить, почему ваше текущее решение не работает?

Если вы видите, что оно соответствует символу пробела после совпадения status:, то соответствует до конца строки на .*, затем возвращается, чтобы найтисовпадать, где пространство существует.Если пробел после ok не существует сразу или где-то позже в строке, совпадений не найдено.Решение:

status:\s+\K\w+

Вам не нужны группы захвата, и вы не должны количественно оценивать прогноз.

Смотрите демонстрацию здесь

PHPкод:

preg_match('~status:\s+\K\w+~', $text, $matches);
0 голосов
/ 24 мая 2018

Вы можете сделать это с помощью позитивного взгляда и взять каждый символ слова после него.

(?<=status:\s)(\\w+)

Демо

...