正则表达式分组问题

时间:2018-01-23 14:53:13

标签: regex regex-group

我需要一个正则表达式来分组我的字符串,但我无法正确分组。

字符串必须是" 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

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

^foo\/(?(?=login)(login)|(.*?)(set|get))$

Click for Demo

<强>解释

  • ^ - 断言行的开头
  • foo\/ - 按字面意思匹配foo/
  • (?(?=login)(login)|(.*?)(set|get)) - 如果当前位置后跟login,则匹配login并将其捕获为组2,否则匹配任何字符的出现次数(在组1中捕获)通过setget(在第3组中捕获)
  • $ - 断言字符串的结尾

更新了解决方案

^foo\/(login$|(?!login).*?(?=[gs]et))([gs]et)?$

Click for Demo

刚才意识到这与Wiktor的评论非常接近