【问题标题】:Regex for URL ending with optional /以可选 / 结尾的 URL 的正则表达式
【发布时间】:2016-08-15 20:43:21
【问题描述】:

我正在寻找一个正则表达式模式来匹配以下 -

https://www.example.org
https://www.example.org/abc

如果字符串有一个尾随/,模式应该忽略它而不是将它添加到匹配中。 如果有任何查询字符串参数,它应该按原样返回字符串。

我试过 ^(.*)(?:/)?$ 但这并没有忽略尾随的 '/'

【问题讨论】:

  • 您尝试了哪些方法,以及它究竟是如何不起作用的?你在哪里使用正则表达式?
  • 你能告诉我们你尝试过什么吗?
  • 假设你只有一个 URL(而不是试图从其他文本中提取它),如果它有一个尾随 / 使用这个正则表达式,你可以使它失败:(?!.*\/$).*
  • 我必须提取 URL Druzion。不要失败。
  • 请检查它是否适合你,regex101.com/r/eD5rR0/4

标签: regex url url-rewriting iis-7


【解决方案1】:

在您的情况下,“忽略”似乎意味着“如果找到尾部斜杠则不匹配”。

您可以使用带有负前瞻的等效版本:

^(?!.*/$)(.*)$

regex demo

模式匹配:

  • ^ - 字符串开头
  • (?!.*/$) - 检查字符串是否不以/ 结尾,如果是,则匹配失败
  • (.*) - 匹配并捕获到第 1 组 ({R:1}) 整个字符串
  • $ - 字符串结束。

【讨论】:

  • 当我在 IIS 重写模块中尝试上述模式时,我收到一个错误 - 表达式包含可重复字符 - *、+、.. 前面没有表达式。然而,这在 Regex101 中工作正常。
  • 那么,它是一个.NET 模块吗?使用原子组:^(?>.+)(?<!\/)^(?>.+)(?<!\/)
  • ^(?>.+)(?.+)(?
  • 它变得非常好奇。我添加了一个基于前瞻的解决方案:^(?!.*/$)(.*)$.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多