Php 获取url以使用或不使用子表达式
我正试图重写一个像这样的url php?sort=66&search=s&category=2,3,4&archive=june&page=3 到 page-sort-1-搜索-类别-1,2,3-存档(6月)-第3页 但问题是,每次调用这个页面时,每个子表达式都可能不在url中,所以我必须将每个子表达式都放在“()?”中,这样正则表达式可以使用它们,也可以不使用它们Php 获取url以使用或不使用子表达式,php,mod-rewrite,Php,Mod Rewrite,我正试图重写一个像这样的url php?sort=66&search=s&category=2,3,4&archive=june&page=3 到 page-sort-1-搜索-类别-1,2,3-存档(6月)-第3页 但问题是,每次调用这个页面时,每个子表达式都可能不在url中,所以我必须将每个子表达式都放在“()?”中,这样正则表达式可以使用它们,也可以不使用它们 ^page (-sort-([0-9]*))? (-search\(([a-z]*)\))? (-category-(
^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
thanx,那么它很有用,但是当我使用(?:subexp)时,url在没有特定子表达式的情况下无法工作,我想要的是url在有或没有该子表达式的情况下工作,有没有办法做到这一点,或者我应该为每种可能的情况写一个正则表达式?@max:对不起,我想你误解了我的意思。我不是建议您将(…)?
更改为(?:…)
。我建议您将(…)
更改为(?:…)
——也就是说,您将(…)?
更改为(?:…)?
。如果子表达式是可选的,则在其后面仍然需要问号。这有意义吗?
(?:...)