【发布时间】: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