【问题标题】:How to match all keywords after slash using preg_match and Regex?如何使用 preg_match 和 Regex 匹配斜线后的所有关键字?
【发布时间】:2017-04-04 18:17:55
【问题描述】:

这是我可能的匹配案例

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

我正在尝试捕捉aaabbbccc(如果有)

我知道或确定有aaa,所以正则表达式可以是/(aaa)/([^/]*)...

我尝试了一些其他场景来捕捉斜线后的其余单词,非贪婪/([^/]+)/([^/].+?)(/[^/].+?)(?:/(.*)),但它们并不匹配所有情况。

有什么想法吗?

可以在这里测试enter link description here

【问题讨论】:

标签: php regex preg-match


【解决方案1】:

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

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

RegEx Demo

RegEx 拆分:

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

编辑:如果你想匹配由/分隔的所有组件,那么你可以使用:

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

RegEx Demo 2

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2012-01-25
    • 2014-12-25
    • 2011-10-15
    相关资源
    最近更新 更多