有关工作,通过这一个,但认为有人可能已经有解决这一问题,所以...

我在寻找一个优雅的(和isapi改写兼容的)经常表达寻找三个已知参数/价值对一个查询,无论顺序,并且还提取的所有其他参数,同时剥离出这三个。

abc=123 def=456ghi=789 所有已知的、固定的弦。他们中可能出现的任何订单的查询,并且可能或可能不是唯一参数,可能或不可能相邻。它应该是明智和不匹配理事会=123abc=1234(使各个搜索参数应加括号通过&,?, #或结束string)。输出我要的是一个新的查询串的剩余params剥离出来。

我会可能采取一刀在逻辑上午,所以奖励点数如果你可以解决这个问题之前,我尝试。

没有正确的解决方案

其他提示

我认为正则表达式不应该被用于这种类型的问题。只是标记化的字符串,每个参数的名称与之进行比较,你在找什么。

s/(\?|\#|\&)(abc=123|def=456|ghi=789)(\&|\#|$)//g

这是近似的,并且未经测试的,而是呈现了工作(我想)的概念。基本上,寻找启动边框,文字字符串,然后端边界,替换为null,每个,全球范围内,并使用|给备用选择用于每个

下面是我想出:

RewriteRule ^/oldpage.htm\?(.\*)(?<=\?|&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:(?:abc=123|def=456|ghi=789)(?:&|#|$))(.\*) /newpage.htm?$1$2$3  [I,RP,L]

我认为作品。先行/回顾后限定符,(?<=和(β=,似乎是关键让我查找包含&或?没有“消费它”弄乱下一个匹配。

有一个问题是,如果旧的页面URL只有三个参数,可以我仍然结束了一个结尾?对重定向的URL,“/newpage.htm?”没有参数。目前我打算避免使用的RewriteCond只查找网址4+ PARAMS这个闪光之前,并且有一个简单的正则表达式匹配对于那些与准确three..so完整的规则集就出来:

RewriteCond URL ^/oldpage.htm\?([^#]\*=[^#]\*&){3,}[^#]\*=[^#]\*.\*

RewriteRule ^/oldpage.htm\?(.\*)(?<=\?|&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:(?:abc=123|def=456|ghi=789)(?:&|#|$))(.\*) /newpage.htm?$1$2$3  [I,RP,L]

RewriteRule ^/oldpage.htm\?(?:abc=123|def=456|ghi=789)&(?:abc=123|def=456|ghi=789)&(?:abc=123|def=456|ghi=789)(.\*) /newpage.htm$1 [I,RP,L]

(末尾的$ 1是#additions的网址...我真的需要它吗?)另一个问题是,我想/oldpage.htm?abc=123&abc=123&abc=123的URL会触发此,但我没有看到周围没有简单的方法,而不是太担心吧..

谁能想到一个更好的方式来处理这一点,或看到任何其他的问题?

有查询的解码器。有很多连接主题,特别是在这个网站。

他们中的一些。

第一

第二

和javadocs 链接 for apache解码器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top