正则表达式分组问题
Regex grouping issue
我需要一个正则表达式来对我的字符串进行分组,但我无法正确分组。
字符串必须以 "foo/" 开头,以 "login" 或 "something" + "/" + (set|get).
结尾
^foo\/(login$|(.*)\/(set|get))
"login" 或 "something" 必须是组 1
"set" 或 "get" 必须是第 2 组(如果存在)。
Test strings:
foo/
foo/login -match
foo/login/get
foo/sadas/set -match
foo/sadasf/asd
foo/blabla/get -match
分组应采用以下格式。
Group1 Group2
foo / login
foo / sadasas / set
foo / blabla / get
试试这个正则表达式:
^foo\/(?(?=login)(login)|(.*?)(set|get))$
解释:
^
- 断言行的开始
foo\/
- 按字面意思匹配 foo/
(?(?=login)(login)|(.*?)(set|get))
- 如果当前位置后跟 login
,则匹配 login
并将其捕获为第 2 组,否则匹配 0+ 次出现的任何字符(在第 1 组中捕获) 后跟 set
或 get
(在第 3 组中捕获)
$
- 断言字符串结束
更新解决方案
^foo\/(login$|(?!login).*?(?=[gs]et))([gs]et)?$
刚刚意识到这与 Wiktor 的评论非常接近
我需要一个正则表达式来对我的字符串进行分组,但我无法正确分组。
字符串必须以 "foo/" 开头,以 "login" 或 "something" + "/" + (set|get).
^foo\/(login$|(.*)\/(set|get))
"login" 或 "something" 必须是组 1
"set" 或 "get" 必须是第 2 组(如果存在)。
Test strings:
foo/
foo/login -match
foo/login/get
foo/sadas/set -match
foo/sadasf/asd
foo/blabla/get -match
分组应采用以下格式。
Group1 Group2
foo / login
foo / sadasas / set
foo / blabla / get
试试这个正则表达式:
^foo\/(?(?=login)(login)|(.*?)(set|get))$
解释:
^
- 断言行的开始foo\/
- 按字面意思匹配foo/
(?(?=login)(login)|(.*?)(set|get))
- 如果当前位置后跟login
,则匹配login
并将其捕获为第 2 组,否则匹配 0+ 次出现的任何字符(在第 1 组中捕获) 后跟set
或get
(在第 3 组中捕获)$
- 断言字符串结束
更新解决方案
^foo\/(login$|(?!login).*?(?=[gs]et))([gs]et)?$
刚刚意识到这与 Wiktor 的评论非常接近