【问题标题】:Regex to match a certain string length within an URL正则表达式匹配 URL 中的特定字符串长度
【发布时间】:2019-01-04 23:50:42
【问题描述】:

我需要将某个 url 与正则表达式匹配,以便在 IIS URL 重写中进行重定向。

这是 url 查询(和变体)的外观:

https://example.com/api/GetData/Version/?auth=TTXL9N5XCTCEG3IXF9
https://example.com/api/GetData/Version/?auth=TTXQQ7HWRTCLD3OM67&iid=-1
https://example.com/api/GetData/Version/?t=3&auth=TTXZRKEUROER88HRJ4&iid=-1

现在重要的是 auth 参数值恰好有 18 位数字(TTX + 15 个附加字符),后跟任何内容或类似 &... 的内容。

所以我需要一个能够识别以下内容的正则表达式:

[Anything before]auth=TTX[exactly 15 additional characters][&... after or nothing]

我当前的正则表达式实际上在经过身份验证后表现良好,但遗憾的是它并没有涵盖所有变化:

(.*)auth=\w{18}$(.*)

当我在末尾添加一个字符时,它不再匹配。

也许有人可以帮助我解决这个问题。谢谢!

【问题讨论】:

  • (.*)auth=TTX\w{15}(.*) ?
  • $ 锚匹配字符串的结尾。你的 (.*) 没有做太多,它总是匹配一个空字符串。您需要将其删除。
  • @CertainPerformance 是的,实际上我的描述有误。现在纠正它。当 auth 参数长于 18 个字符时,您的变体也匹配。但是当它更长时它不应该匹配,除非后面有另一个参数(实际上总是一个 & )。所以在这种情况下,它应该匹配。

标签: regex iis url-rewriting


【解决方案1】:

(.*)auth=\w{18}(?=&|$)RegExr

  • (.*)auth=\w{18} 正在寻找 ...auth=[a-zA-Z0-9_](是的 _ 包含在 \w 中)
  • (?=&|$) & 或结束的积极前瞻

提示

考虑使用[A-Z0-9] 而不是\w 来匹配您的令牌。

【讨论】:

  • 做到了。谢谢!
【解决方案2】:

如果您希望正则表达式仅匹配包含 0-9 和 A-Z 的查询字符串键 auth,请使用:

(.*)[?&]auth=TTX[A-Z0-9]{15}(&.*)?

它匹配任何在查询字符串中具有身份验证且值为 TTX 的 url,然后只允许查询字符串项。


CertainPerformance 在评论中发布了此解决方案:(.*)auth=TTX\w{15}(.*)。这有一个小问题:它允许 auth 长于 TTX+15 个字符。

【讨论】:

  • 其实你的答案允许超过15个字符,最后一部分&?(.*)只对&这个字符进行条件处理,如果它不存在,其他的都会被捕获
  • @RodrigoFerreira 现在已修复。
  • 刚刚在 IIS 管理器中测试过,当 auth 字符串末尾有任何字符(不仅是 &)时,这仍然是肯定匹配的。它只是创建一个带有 & 字符的新组匹配。检查这个:regex101.com/r/DZrkoE/2
  • 如果你想匹配整个字符串,你必须添加$结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2015-04-02
  • 1970-01-01
  • 2018-11-24
相关资源
最近更新 更多