【问题标题】:Regex - Match URL Paths that contain a trailing /正则表达式 - 匹配包含尾随 / 的 URL 路径
【发布时间】:2017-11-08 22:10:36
【问题描述】:

我正在尝试匹配任何没有尾部斜杠的传入请求。我还想捕获 URL 路径,以在捕获组中使用。这是我到目前为止所得到的。

传入网址: http://www.example.com/path/to/

正则表达式: http:\/\/www.example.com\/(.*)[.\/]

Here's a link to the regex tester results

这捕获了我想要的内容,但它始终与所有 URL 匹配 - 而不是不包含尾部斜杠的 URL。

正则表达式处理器基于 PERL。

我需要改变什么?

【问题讨论】:

标签: regex


【解决方案1】:

要匹配不以/ 结尾的网址,请使用带有$ 锚点的否定回溯,如下所示:

http:\/\/www.example.com\/(.*)$(?<!\/)
                              ^^^^^^^^

$ 将断言字符串末尾的位置,如果有斜线,则向后查找将导致匹配失败。见this regex demo

另一种方法是使用(?!.*\/$) 前瞻:

http:\/\/www.example.com\/(?!.*\/$)(.*)
                          ^^^^^^^^^ 

another regex demo

在发现字符串末尾有/ ($) 后,(?!.*\/$) 否定前瞻将导致匹配失败。请注意,.*(匹配任何 0+ 字符)是到达字符串末尾所必需的,您不能只使用 (?!\/$)

【讨论】:

    【解决方案2】:

    您希望在末尾有一个非捕获组并像这样匹配行开始/结束

    ^http:\/\/www.example.com\/(.*)[^\/]$(将“比赛期或/”[.\/]替换为“非/”[^\/],并用^$包围)

    (离你这么近!)

    添加s? 使https? 允许使用可选的s,如果您不关心正在使用的协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2020-09-30
      • 2014-08-23
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      相关资源
      最近更新 更多