让url使用或不使用子表达式

时间:2012-03-11 14:07:46

标签: php mod-rewrite

我试图重写像

这样的网址

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个匹配限制

是否有“()?”

的替代品

1 个答案:

答案 0 :(得分:0)

我不得不承认,我对你问题的某些部分感到有点困惑,所以如果我的答案完全偏离基础,我会提前道歉。 。 。但它听起来就像你需要的是一个非捕获组。这样:

(...)

匹配...并创建一个捕获组(你称之为“变量”);这样:

(?:...)

只是匹配...,而不创建捕获组。因此,如果您只想对子表达式进行分组,而不保存其所有内容以用作$1,则非常有用。