如何用单个Regex提取IIS中以/分隔的URL参数
当然可以搞定这个需求!你只需要把正则里的后续参数部分改成可选匹配,就能同时兼容1个、2个或3个参数的URL了。
调整后的正则模式
\/([a-zA-Z-]+)(?:\/([a-zA-Z-]+))?(?:\/([a-zA-Z-]+))?\/?$
模式拆解(帮你理解每部分作用)
\/([a-zA-Z-]+):匹配第一个必填的参数,允许字母和连字符,结果会被捕获到分组1(?:\/([a-zA-Z-]+))?:用非捕获组(?:...)包裹第二个参数的匹配规则,末尾的?表示这个参数是可选的。如果存在,会被捕获到分组2(?:\/([a-zA-Z-]+))?:和上面逻辑一致,处理可选的第三个参数,捕获到分组3\/?$:匹配URL末尾可选的斜杠,不管URL结尾有没有/都能正常匹配
适配你的三类URL测试
- 对于
www.mydomain.com/firstparameter/:- 分组1:
firstparameter,分组2、3为空
- 分组1:
- 对于
www.mydomain.com/firstparameter/secondparameter/:- 分组1:
firstparameter,分组2:secondparameter,分组3为空
- 分组1:
- 对于
www.mydomain.com/firstparameter/secondparameter/hyphenated-url-parameter/:- 分组1:
firstparameter,分组2:secondparameter,分组3:hyphenated-url-parameter
- 分组1:
另外提个小细节:你原来的正则里写了[a-zA-z],这里的小写z是笔误哦,应该是[a-zA-Z](覆盖所有大小写字母),而且加上-才能匹配带连字符的参数。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

