我的正则表达式技能有限,但是我设法提出了一个看起来与我想要的表达式匹配的表达式,但是我遇到的问题是使用表达式的匹配部分。
规则如下:
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/
我已经做了很多寻找解决方案的事情,但是在这种情况下,我不确定我什至不知道用于搜索的术语,因为我在反向引用中阅读的大部分内容似乎都是针对单个匹配项的。
答案 0 :(得分:1)
您需要使第一个和第二个捕获组不捕获,并用捕获器将第一个捕获组及其量词包装起来:
^((?:[^/]+/){2,4})category/(?:[^/]+/){2}/?$
^^^^ ^ ^^
请参见regex demo
((?:[^/]+/){2,4})
是一个ID为1的捕获组,它匹配2、3或4个连续出现的1个以上的字符,而不是/
,然后是/
。 ?:
之后的(
形成non-capturing group,该仅用于对一系列模式进行分组,但不将子匹配项存储在内存中,并且在找到匹配项后无法引用其内容。
这些绿色突出显示的部分是捕获到第1组的子字符串,{R:1}
占位符表示: