我正在尝试重写一个url,如下所示
page.php?sort=66&search=s&category=2,3,4&archive=june&page=3
至
page-sort-1-search(s)-category-1,2,3-archive(june)-page3
但问题是,每次调用此页面时,每个子表达式my或不一定在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个capture-group,对于具有5-6个变量的链接,这超过了10个,并且在模式重写中有9个匹配限制
有没有“()”的替代品?
发布于 2012-03-11 22:14:31
我必须承认,我对你的问题的某些部分感到有点困惑,所以如果我的回答是完全错误的,我提前道歉。。。但听起来你需要的是一个非捕获组。这一点:
(...)匹配...并创建一个捕获组(您称之为“变量”);这是:
(?:...)只匹配...,而不创建捕获组。因此,如果您要做的只是对子表达式进行分组,而不保存要用作$1的所有内容,那么它将非常有用。
https://stackoverflow.com/questions/9655598
复制相似问题