我试图重写像
这样的网址page.php文件排序= 66&安培;搜索= S&安培;类别= 2,3,4&安培;存档=六月&安培;页= 3
到
页排序-1-搜索(一个或多个)-category -1,2,3-归档(六月)-page3
但是,每次调用此页面时,每个子表达式都是我的或者可能不在url中,所以我必须将每个子表达式放在“()?”中所以正则表达式使用或不使用它们
^page
(-sort-([0-9]*))?
(-search\(([a-z]*)\))?
(-category-([0-9][,]?*))?
............. 你明白了这个想法
现在问题是模式重写正在考虑括号中的每个子表达式作为实际变量
(-sort-([0-9]*))? this is how mode rewrite interpret this => $1 = -sort-66 , $2 = 66
因此,对于每个子表达式,我得到了2个捕获组,而对于具有5-6个变量的链接,则超过10个 并且模式重写中有9个匹配限制
是否有“()?”
的替代品答案 0 :(得分:0)
我不得不承认,我对你问题的某些部分感到有点困惑,所以如果我的答案完全偏离基础,我会提前道歉。 。 。但它听起来就像你需要的是一个非捕获组。这样:
(...)
匹配...
并创建一个捕获组(你称之为“变量”);这样:
(?:...)
只是匹配...
,而不创建捕获组。因此,如果您只想对子表达式进行分组,而不保存其所有内容以用作$1
,则非常有用。