我遇到以下正则表达式的问题:
I login with (CORRECT|INCORRECT (username|password|username and password)) credentials
基本上,我希望它匹配的是仅以下4个字符串(它确实如此):
但是,匹配组如下:
我希望匹配组如下:
答案 0 :(得分:1)
如果你可以使用支持Branch Reset
的引擎,可以这样做
I login with (?|(CORRECT)()|(INCORRECT) (username(?: and password)?|password)) credentials
在分支重置组的每次轮换中,组编号重置:
I [ ] login [ ] with [ ]
(?| # Branch reset
( CORRECT ) # (1)
( ) # (2)
| # or,
( INCORRECT ) # (1)
[ ]
( # (2 start)
username
(?: [ ] and [ ] password )?
|
password
) # (2 end)
) # End branch reset
[ ] credentials
或者,如果分支重置不可用,请使用此
I login with (?:(CORRECT)|(INCORRECT) (username|password|username and password)) credentials
这样做是在单独的组中捕获正确/不正确,然后是 如果组2匹配,则组3有效 它仍然匹配完全相同的字符串。
I[ ]login[ ]with[ ]
(?:
( CORRECT ) # (1)
| ( INCORRECT ) # (2)
[ ]
( username | password | username[ ]and[ ]password ) # (3)
)
[ ]credentials
答案 1 :(得分:0)
您不需要嵌套组,您可以将此正则表达式与固定的第一组和可选的第二组一起使用:
I login with ((?:IN)?CORRECT) (?:(username|password|username and password) )?credentials