我需要在URL重定向(IIS,web.config)中捕获以下URL组:
https://www.example.org/tags/1/a
https://www.example.org/tags/1/a/100
https://www.example.org/tags/2/intchars-æøå
https://www.example.org/tags/2/test/150
https://www.example.org/tags/3/c/200
我需要检测:
我的正则表达式为tags\/([0-9]+)\/(.*)\/?([0-9]+)?
,但问题是它合并了组2和3。我得到的结果如下:
代替:
在此处查看测试:https://regex101.com/r/a1uiun/1
这是我进入web.config的距离:
<rule name="Tags" stopProcessing="true">
<match url="^tags/([0-9]+)/(.*)$" />
<action type="Rewrite" url="/redir/tags/{R:1}/{R:2}" appendQueryString="false" />
</rule>
检测到https://www.example.org/tags/1/a,但最后一个组仍合并。
答案 0 :(得分:1)
将您的正则表达式更改为:
tags\/([0-9]+)\/(.*?)(?:\/([0-9]+))?$
https://github.com/neovim/neovim/wiki/FAQ#-and-system-do-weird-things-with-interactive-processes 。
更改您的正则表达式:
(.*?)
将第二组中的量词更改为懒惰的量词,以使其与之后的所有内容都不匹配。
(?:\/([0-9]+))
将下一个斜杠和数字添加到一个非捕获组中,并使整个过程成为可选项。
在末尾添加了$
,以确保如果第三组不存在,惰性匹配将继续到行尾。