我正在尝试修复一些正则表达式,用于 lita 的 chatops 机器人。我有以下正则表达式:
/^(?:hows+dos+Is+yous+gets+fars+iss+its+froms+)?(.+)s+tos+(.+)/i
这应该捕获"to"之前和之后的单词,前面有可选单词,可以形成这样的问题:我如何从x到y,从x到y有多远,从x到y有多远。
预期输出:
match 1 : "x"
match 2 : "y"
在大多数情况下,我的可选词按预期工作。 但是,当我提取响应匹配项时,我得到了导致第一个捕获组的单词。
因此,how far is it from sfo to lax
应该返回:
sfo
和lax
.
但返回:
how far is it from sfo
和lax
你的故障是正则表达式的第一个块没有意义。
若要从多个选项中进行选择,请使用以下语法:
(a|b|c)
我认为你想做的是这样的:
/^(?:(?:how|do|I|you|get|far|is|it|from)s+)*(.+)s+tos+(.+)/i
正则表达式说要跳过多个选项中的所有单词,无论顺序如何。
如果要保留词序,可以使用正则表达式,例如以下伪代码:
… how (can|do|will) (I|you|we) (get|go|travel) from …
当你想匹配单词时,w
是我使用的最自然的模式(例如,它用于字数统计工具。
要捕获"to"前后的任何 1 个单词可以使用(w+stos+w*)
正则表达式来完成。
要将它们作为 2 个不同的组返回,您可以使用 (w+)s+tos+(w+)
.
看看演示。