如何使用preg_match和Regex匹配斜杠后的所有关键字?

时间:2017-04-04 18:17:55

标签: php regex preg-match

这是我可能的匹配案例

/aaa
/aaa/
/aaa/bbb
/aaa/bbb/
/aaa/bbb/ccc
/aaa/bbb/ccc/

我正试图抓住aaabbbccc(如果有的话)

我知道或确定aaa在那里,因此正则表达式可以是/(aaa)/([^/]*)...

我尝试了一些其他方案,以便在斜线,非贪婪/([^/]+)/([^/].+?)(/[^/].+?)(?:/(.*))之后捕捉其余字词,但它们不会匹配所有案例。

有什么想法吗?

可以在这里测试enter link description here

1 个答案:

答案 0 :(得分:0)

首次匹配后,您可以将此正则表达式与所有可选匹配项一起使用:

~^/([^/]+)(?:/([^/]+)(?:/([^/]+))?)?/?$~m

RegEx Demo

RegEx分手:

  • ^/ - 开始时匹配/
  • ( - 开始捕获的组#1
    • [^/]+ - 匹配h1或更多非斜杠字符
  • ) - 结束捕获的组#1
  • (?: - 启动非捕获组#1
    • / - 匹配文字斜杠
    • ( - 开始捕获的组#2
      • [^/]+ - 匹配1个或更多非斜杠字符
    • ) - 结束捕获的组#2
    • (?: - 启动非捕获组#2
      • / - 匹配文字/
      • ( - 开始捕获的第3组
        • [^/]+ - 匹配1个或更多非斜杠字符
      • ) - 结束捕获的组#3
    • )? - 结束非捕获组#2(可选匹配)
  • )? - 结束非捕获组#1(可选匹配)
  • /? - 匹配可选尾随/ $ - 输入结束

编辑:如果您要匹配/分隔的所有组件,则可以使用:

~(?:^|\G)/([^/\n]+)~m

RegEx Demo 2