我想要一个正则表达式,以便我想要
abc,后跟def,然后是ghi,并且中间可以有空格。
accept:abcdefghi,abc def ghi,单个abc,def,ghi也是如此。
如何在regex java中实现。
我使用了((abc)?[\s,،]*(def)?[\s,،]*(ghi\s*\d+)?(jkl\s*\d{9})?)
这给出了结果,但是对于像这样的否定测试:
zksdfhhoiopokpjhhddfddfdfd
让我对空间相匹配。
结果 .matches()方法:假 .lookingAt()方法:真 显示6场比赛 k l m n o in https://www.freeformatter.com/java-regex-tester.html
答案 0 :(得分:0)
我认为您可能正在寻找带有可选部件的嵌套分组结构,或者列出单个部件的替代方案。
使用带有反向引用的否定前瞻来检查以下内容是否不是第1组中捕获的内容。正则表达式的设置可能是:
(abc(?:[\h,]*def(?:[\h,]*ghi)?)?|(?:abc|def|ghi))(?!\h+\1\b)
这将首先匹配abc,然后匹配一个可选的非捕获组(?:...)?
,它本身也包含一个可选的非捕获组。如果不匹配,则交替|
针对各个匹配检查。
请注意,\s
也匹配换行。我使用\h
来匹配水平空白字符。