在PHP中,我正在尝试构建一个自然文本识别系统,能够以智能的方式识别您所写的内容。
我想让它将一个句子与一个“模式”匹配,并存储一些信息,例如,如果schedule a {scheduletype} with {person} at {time}
与Schedule a meeting with Ann at 3pm
进行比较,PHP代码将创建变量$scheduletype
,其值为meeting,$person
的值为Ann,$time
的值为3pm。是否也可以让它在句子顺序不同时仍然工作,例如’At 3pm schedule a meeting with Ann’?
我已经在Google和Stack Exchange上搜索过这个问题,但遗憾的是没有找到任何相关内容。
这是我目前的代码:
$pattern = 'schedule a ([a-zA-Z0-9\-\.\/\?_=&;]*) with ([a-zA-Z0-9\-\.\/\?_=&;]*) at ([a-zA-Z0-9\-\.\/\?_=&;]*)';$content = 'shedule a meeting with Ann at 3pm';$match = preg_match($pattern, strtolower($content) , $found);print_r($match);
问题是我的代码没有将任何内容分配给$preg_match
。
回答:
您可以使用这种命名捕获组的正则表达式:
#Schedule a (?<scheduletype>\w+)\swith\s(?<person>\w+)\sat\s(?<time>\w+)#
示例:
<?php$regex= '#Schedule a (?<scheduletype>\w+)\swith\s(?<person>\w+)\sat\s(?<time>\w+)#';preg_match($regex, 'Schedule a meeting with Ann at 3pm', $matches);echo $matches['scheduletype']."\n";echo $matches['person']."\n";echo $matches['time']."\n";
在这里玩转正则表达式:https://regex101.com/r/6QPRsG/1/
在这里玩转代码:https://3v4l.org/OBOnY