Regex 使用正则表达式分离所需数据时出现问题

Regex 使用正则表达式分离所需数据时出现问题,regex,Regex,我试图在我正在构建的rails应用程序上使用regex来分离输入,而不用手动拆分字符串 我的正则表达式是: (?<action>\S+)(?:\s(?<query>.*)\s)(?<id>(?<=.).*?(?=\s)) 由此,我需要以下值: action: add, query: hello, id: name action: remove, query: first second, id: id action: add, query: first,

我试图在我正在构建的rails应用程序上使用regex来分离输入,而不用手动拆分字符串

我的正则表达式是:

(?<action>\S+)(?:\s(?<query>.*)\s)(?<id>(?<=.).*?(?=\s))
由此,我需要以下值:

action: add, query: hello, id: name
action: remove, query: first second, id: id
action: add, query: first, id: nil (or "")
我做错了什么?它与最后一行测试数据完全不匹配。任何帮助都很好。

试试这个:

^(?<action>\S+)(?:\s(?<query>(?:(?! by ).)*))(?: by (?<id>\w+))?

太棒了,非常感谢你这么好地解释它,它工作得很好!
^(?<action>\S+)(?:\s(?<query>(?:(?! by ).)*))(?: by (?<id>\w+))?
^(?<action>\S+)(?:\s(?<query>.*?(?= by |$)))(?: by (?<id>\w+))?$