如何简化我的正则表达式(^(\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
答案 0 :(得分:4)
您可以使用以下带有可选组的正则表达式:
^
请参阅regex demo
此正则表达式匹配:
(\w+)
- 字符串的开头\/
- 一个或多个字母数字或下划线字符/
- (\w+)
符号(?:\/(\d+)?)?
- 一个或多个字母数字或下划线字符(?:...)?
- 一个可选的(一次或零次)序列(由于(?:...)
构造,一个非捕获组?
+一个\/
- 一个或零 - 量词)匹配
(\d+)?
- 正斜杠?
- 匹配一个或多个数字的可选捕获组(但由于(...)
量词应用于整个组$
,因此该组可能会丢失)