如何简化我的正则表达式 (^(\w+)\/(\w+)\/(\d+)$|^(\w+)\/(\w+)\/$|^(\w+)\/(\w+)$)
以匹配 controller/action(/id)
等示例?我目前的正则表达式看起来如此漫长而复杂:(
匹配示例:
controller/action
controller/action/
controller/action/123
不匹配:
controller/
controller/action/action
controller/action/123/
controller/action/123/456
1 回答
您可以使用以下带有可选组的正则表达式:
见regex demo
这个正则表达式匹配:
^
- 字符串的开头(\w+)
- 一个或多个字母数字或下划线字符\/
- 一个/
符号(\w+)
- 一个或多个字母数字或下划线字符(?:\/(\d+)?)?
- 可选(一次或零次出现)序列(由于(?:...)?
构造,非捕获组(?:...)
a?
- 一个或零个量词)匹配\/
- 正斜杠(\d+)?
- 匹配一个或多个数字的可选捕获组(但由于?
量词应用于整个组(...)
,因此该组可能会丢失)$
- 字符串锚点结束 .