Как извлечь субъект / человека из предложения с помощью Regex в PHP? - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу сопоставить и извлечь тему и человека из следующего формата строк:
((Когда | Где) есть)? (Мой |)? (следующий)? (предмет)? (Встреча | событие)? (с (человеком))?

Возможные предложения:

Когда моя встреча с Дэвидом Шармой (Персона = Дэвид Шарма)?
Где находится обед (Тема = Обед)?
Когда пятничный обед (Тема = пятничный обед)?
Где мой следующий ужин (тема) с Джоном (человек)?

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

 if (preg_match("/(?:(?:when|where)\s+is\s+)?(?:(?:my|the|your)\s+)?(?:next\s+)?((\S+\s+|\S+\s+\S+)+)?(?:(?:event|meeting)\s+)?(?:with\s+(.*))?/", $query, $matches)) {  
  print_r($matches[1]); //subject  
  print_r($matches[2]); //person  
}

1 Ответ

2 голосов
/ 01 апреля 2019

Попробуйте Regex: ^(?:when|where) is(?: (?:my|the|your))?(?: next)?(?: (?:((?!event|meeting)[\w ]+?)))?(?: (?:event|meeting))?(?: with ([\w ]+))?\?$

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...