REGEX - 如何忽略URLS中的某些查询字符串,但忽略其他查询字符串

时间:2012-11-07 21:33:55

标签: regex wordpress match

我需要将旧博客网址重定向到新的博客网址。 ID字段是关键查询字符串,应忽略查询字符串中的所有其他内容。高层次的逻辑:

如果旧的不区分大小写的网址在网址的查询字符串中的任何位置匹配:/Blog/Post.aspx? + ID=33,那么我将重定向到:/newblog/newurl/

当前的REGEX代码:(?i:/Blog/Post.aspx)|(\?)|(?i:id=33)

Success: /Blog/Post.aspx?id=33
Fails: /Blog/Post.aspx?ignore=me&id=33
Fails: /Blog/Post.aspx?ignore=me&id=33&ignoreme=too

我如何忽略潜在的未知查询字符串ignore=meignoreme=too,但是当ID=33位于查询字符串中时,仍会提出重定向的REGEX匹配?< / p>

谢谢m.buettner的答案!

2 个答案:

答案 0 :(得分:2)

现在,如果您的网址中只有 ID=33,或者即使中有问号,您甚至可以重定向。我想这不是你想要的。你可能正在寻找这样的东西:

(?i:/Blog/Post.aspx\?.*id=33(?!\w)).*

这将需要/Blog/Post.aspx?,然后允许任意字符,直到遇到id=33

根据您使用的语言,您还可以使用前瞻,这样可以更轻松地检查您可能不知道的顺序的不同参数:

(?i:/Blog/Post.aspx\?(?=.*id=33(?!\w))).*

然后可以很容易地扩展到

(?i:/Blog/Post.aspx\?(?=.*id=33(?!\w))(?=.*another=requirement(?!\w))).*

使用第一种方法,您必须为两种可能的订单添加两种备选方案。

编辑:所有三种解决方案的警告:在数字之后,它们需要一个非单词字符(除了字母,数字或下划线之外的任何字符)。这意味着他们会在...id=33+34......id=33%2F...等情况下给出误报。但这些不应该由Wordpress首先生成。

答案 1 :(得分:0)

Ops,我将带来一个通用答案来匹配网址中的常规属性!好吧,如果你需要的话,我会留在这里

DEMO

(?:(id|noignoreme|dontignoreme)=([^&\n]+)(?:\n|&|$))

使用此功能,您可以添加要接受的参数,并将其作为group1(选项)和group2(该选项的文本)返回。

之后你可以看到ID = 33 then do that; else do thot;