【问题标题】:Regex to validate URI path with wildcard正则表达式使用通配符验证 URI 路径
【发布时间】:2021-08-18 08:00:29
【问题描述】:

我正在尝试使用星号单 (*) 或双 (**) 形式的通配符模式验证输入的 URI 路径。例如:/path1/*/path2//path1/path2/**/path3

我想出了正则表达式^(?:\/\w+\/?|\/\*\/?|\/\*\*\/?)+$,它匹配下面列表中的所有有效路径,除了:/foo*/foo**,不匹配无效,除了一个/foo//bar

您能否建议一个更好的正则表达式来涵盖所有情况,并且可能比我的更优化。

https://regex101.com/r/U65utY/1

考虑有效路径,例如:

  • /foo/bar
  • /foo/bar/
  • /*
  • /foo/*
  • /foo/*/bar
  • /foo*
  • /**
  • /foo**
  • /foo/**
  • /foo/**/bar

和无效路径,如:

  • foo/bar
  • //foo
  • /foo//bar
  • /foo/***/bar
  • /***

【问题讨论】:

  • 试试^(?:/(?:\*{1,2}|\w+\*{0,2}))+/?$,见demo
  • 小注:您不需要转义正斜杠 - 它们没有特殊含义。即您的正则表达式^(?:\/\w+\/?|\/\*\/?|\/\*\*\/?)+$^(?:/\w+/?|/\*/?|/\*\*/?)+$ 相同。尽管某些语言/工具 delimit 带有斜杠的正则表达式,但这并不会使该上下文中需要的斜杠转义成为正则表达式的一部分。

标签: regex regex-group


【解决方案1】:

你可以使用

^(?:/(?:\*{1,2}|\w+\*{0,2}))+/?$

regex demo

详情

  • ^ - 字符串开头
  • (?:/(?:\*{1,2}|\w+\*{0,2}))+ - 出现一次或多次
    • / - 一个 / 字符
    • (?:\*{1,2}|\w+\*{0,2}) - 替代方案之一:
      • \*{1,2}| - 一个或两个星号,或
      • \w+\*{0,2} - 一个或多个单词字符,然后是零、一或两个星号
  • /? - 一个可选的/
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多