【问题标题】:REGEX - How to ignore some query strings in URLS, but not in othersREGEX - 如何忽略 URLS 中的某些查询字符串,但不忽略其他字符串
【发布时间】:2012-11-07 21:33:55
【问题描述】:

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

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

当前正则表达式代码:(?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 在查询字符串中时仍然想出一个正则表达式匹配来重定向?

感谢您的回答 m.buettner!

【问题讨论】:

    标签: regex wordpress match


    【解决方案1】:

    如果您的网址中 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 生成。

    【讨论】:

    • 谢谢 :) 我将它调整为 (?i:/Blog/Post.aspx\?.*id=33.*) 以允许 ID 位于前面、后面、中间或独自的。但是,如何让它在:/Blog/Post.aspx?id=330&ignore=me 上失败,这目前是 ID=33 与 id=330 查询字符串的误报匹配?
    • @JohnnyG77 如果您不使用正则表达式方法,则需要匹配 整个 字符串,则不需要尾随 .*。你在哪里使用这个正则表达式?
    • 我将它用于此 wordpress 插件的 URL 重定向:wordpress.org/extend/plugins/redirection。它只允许一行正则表达式,所以我不能使用更典型的字符串操作。
    • @JohnnyG77 hm 我不确定是否需要匹配整个字符串,但看起来确实如此。如果您想让我的其他变体也适用于这种情况,只需在前瞻后的最后添加 .*
    • 遗憾的是,这与以下内容不匹配:"(?i:/Blog/Post.aspx\?(?=.*id=33))"...它忽略了尾随的 "&ignore =我”。这确实匹配:“(?i:/Blog/Post.aspx\?)|(.*id=33.*)”,但给了我一个 ID 330 的误报。我必须补充,我不知道是什么查询字符串可能会出现(感谢 google),所以我不知道“ignore=me”中可能会添加什么。
    【解决方案2】:

    Ops,我打算提供一个通用答案来匹配 url 中的通用属性!好吧,我会把它留在这里以备不时之需

    DEMO

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

    有了这个,你可以添加你想要接受的参数,它会以 group1(选项)和 group2(选项的文本)的形式返回。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2022-10-22
      • 1970-01-01
      相关资源
      最近更新 更多