IIS URL将正则表达式后向引用重写为未知数量的匹配项

时间:2018-06-28 10:39:39

标签: regex iis url-rewrite-module

我的正则表达式技能有限,但是我设法提出了一个看起来与我想要的表达式匹配的表达式,但是我遇到的问题是使用表达式的匹配部分。

规则如下:

UITableView

示例网址可能如下:

override func viewDidLoad(){
    super.viewDidLoad()

    self.yourtableview.register(UINib(nibName: "yourCellXIBname", bundle: Bundle.main), forCellReuseIdentifier: "YourCellReUseIdentifier")
   }

由于网站上的问题,我试图301重定向网站上的链接以删除网址的后3个网段。之前的段数可以在2到4之间变化。我想做的是在<rule name="FixDestinationCategories" stopProcessing="false"> <match url="^([^\/]+\/){2,4}category/([^\/]+\/){2}/?$" /> <action type="Redirect" appendQueryString="true" redirectType="Permanent" url="{R:1}" /> </rule> 之前获取整个路径,我还需要确保生成的路径以斜杠结尾,因此上面的重定向例子最终将是:

country/destinations/itineraries/itinerary/category/region/country/
another/directory/category/region/country/

但是,到目前为止,我的重定向网址最终还是:

/category/region/country/

我已经做了很多寻找解决方案的事情,但是在这种情况下,我不确定我什至不知道用于搜索的术语,因为我在反向引用中阅读的大部分内容似乎都是针对单个匹配项的。

1 个答案:

答案 0 :(得分:1)

您需要使第一个和第二个捕获组不捕获,并用捕获器将第一个捕获组及其量词包装起来:

^((?:[^/]+/){2,4})category/(?:[^/]+/){2}/?$
 ^^^^            ^          ^^

请参见regex demo

((?:[^/]+/){2,4})是一个ID为1的捕获组,它匹配2、3或4个连续出现的1个以上的字符,而不是/,然后是/?:之后的(形成non-capturing group,该enter image description here仅用于对一系列模式进行分组,但不将子匹配项存储在内存中,并且在找到匹配项后无法引用其内容。

这些绿色突出显示的部分是捕获到第1组的子字符串,{R:1}占位符表示:

http://chatterbot.readthedocs.io/en/stable/logic/index.html