[英]Finding multiple groups in Java regex for simple option parser
我需要修改这个正则表达式来查找多个组匹配:
(?:--)(?<key>[^\\s=]+)(?:(?<assign> *[ =] *)(?! --)(?<value>"[^"]*"|\\S+))?
在 Java 中:
"(?:--)(?<key>[^\\\\s=]+)(?:(?<assign> *[ =] *)(?! --)(?<value>\\"[^\\"]*\\"|\\\\S+))?"
这正确匹配以下内容:
--key=value
--key=--value
--key value
--flag
--key="--value"
--key "--value"
--key=value --foo=bar
--key=value --foo=bar --flag
但是如果--flag
出现在任何其他选项之前,它就会失败:
--key=value --flag --foo=bar
到目前为止,我一直在尝试修改assign
和value
捕获组之间的负前瞻,但没有成功。 为flag
捕获的value
最终是--foo=bar
而不是null
。
有关如何解决此问题的任何专家建议?
我设法修复了正则表达式。 网站https://regexr.com/非常宝贵。
固定的正则表达式是:
(?<prefix>--)(?<key>[^\\s=]+)(?:(?! --)(?<assign> *[ =] *)(?! --)(?<value>"[^"]*"|\\S+))?
这是 Java 类和单元测试:
https://gist.github.com/kirklund/845baf340a1999a57db9e59e6ba40ce0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.