Я хочу сопоставить и извлечь тему и человека из следующего формата строк:
((Когда | Где) есть)? (Мой |)? (следующий)? (предмет)? (Встреча | событие)? (с (человеком))?
Возможные предложения:
Когда моя встреча с Дэвидом Шармой (Персона = Дэвид Шарма)?
Где находится обед (Тема = Обед)?
Когда пятничный обед (Тема = пятничный обед)?
Где мой следующий ужин (тема) с Джоном (человек)?
Вот мой результат после различных попыток, но один или другой запрос не совпадают должным образом:
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
}