如何在PHP中使用Regex从句子中提取主题/人?

时间:2019-04-01 12:51:13

标签: php regex

我想从以下字符串格式中匹配并提取主题和人:
(((何时|在哪里)是)? (我的)? (下一个)? (学科)? (会议|事件)? (与(人)一起)?

可能的句子:

我什么时候会见David Sharma(人= David Sharma)?
午餐(主题=午餐)会议在哪里?
星期五的午餐时间(主题=星期五的午餐)?
我与约翰(人物)的下一个晚餐(主题)活动在哪里?

这是经过多次尝试后我的结果,但是某些查询或其他查询不正确:

 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 个答案:

答案 0 :(得分:2)

尝试使用正则表达式:^(?:when|where) is(?: (?:my|the|your))?(?: next)?(?: (?:((?!event|meeting)[\w ]+?)))?(?: (?:event|meeting))?(?: with ([\w ]+))?\?$

Demo