我需要一个正则表达式来分组我的字符串,但我无法正确分组。
字符串必须是" foo /",以" login"结尾后或"某事" +" /" +(设置|获取)。
^foo\/(login$|(.*)\/(set|get))
"登录"或"某事"必须是第1组 "设置"或"得到"如果存在,必须是第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
答案 0 :(得分:1)
试试这个正则表达式:
^foo\/(?(?=login)(login)|(.*?)(set|get))$
<强>解释强>
^
- 断言行的开头foo\/
- 按字面意思匹配foo/
(?(?=login)(login)|(.*?)(set|get))
- 如果当前位置后跟login
,则匹配login
并将其捕获为组2,否则匹配任何字符的出现次数(在组1中捕获)通过set
或get
(在第3组中捕获)$
- 断言字符串的结尾更新了解决方案
^foo\/(login$|(?!login).*?(?=[gs]et))([gs]et)?$
刚才意识到这与Wiktor的评论非常接近