这是我可能的匹配案例
/aaa
/aaa/
/aaa/bbb
/aaa/bbb/
/aaa/bbb/ccc
/aaa/bbb/ccc/
我正试图抓住aaa
,bbb
和ccc
(如果有的话)
我知道或确定aaa
在那里,因此正则表达式可以是/(aaa)/([^/]*)...
我尝试了一些其他方案,以便在斜线,非贪婪/([^/]+)
,/([^/].+?)
,(/[^/].+?)
,(?:/(.*))
之后捕捉其余字词,但它们不会匹配所有案例。
有什么想法吗?
可以在这里测试enter link description here
答案 0 :(得分:0)
首次匹配后,您可以将此正则表达式与所有可选匹配项一起使用:
~^/([^/]+)(?:/([^/]+)(?:/([^/]+))?)?/?$~m
RegEx分手:
^/
- 开始时匹配/
(
- 开始捕获的组#1
[^/]+
- 匹配h1或更多非斜杠字符)
- 结束捕获的组#1 (?:
- 启动非捕获组#1
/
- 匹配文字斜杠(
- 开始捕获的组#2
[^/]+
- 匹配1个或更多非斜杠字符)
- 结束捕获的组#2 (?:
- 启动非捕获组#2
/
- 匹配文字/
(
- 开始捕获的第3组
[^/]+
- 匹配1个或更多非斜杠字符)
- 结束捕获的组#3 )?
- 结束非捕获组#2(可选匹配))?
- 结束非捕获组#1(可选匹配)/?
- 匹配可选尾随/
$
- 输入结束 编辑:如果您要匹配/
分隔的所有组件,则可以使用:
~(?:^|\G)/([^/\n]+)~m