【问题标题】:Regex to filter URL between first and optional second slash正则表达式过滤第一个和可选的第二个斜杠之间的 URL
【发布时间】:2015-09-15 11:26:40
【问题描述】:

我正在尝试构建一个正则表达式来过滤 URL。

我需要一个正则表达式来匹配以下情况:

http://proxy/www.test.com 我希望结果是 www.test.com

http://proxy/www.test.com/test 我希望结果是 www.test.com

http://proxy/test.org/test 我希望结果是 test.org

http://proxy/app.local-test:5555/test 我希望结果是 app.local-test:5555

http://proxy/local-test:5555/test 我希望结果是 local-test:5555

我得到了这个正则表达式:(?<=proxy\/)(.*)(?=\/),它非常正确地过滤了 url,但取决于第二个斜杠。第二个斜杠是可选的,所以我的正则表达式不能解决问题。

【问题讨论】:

    标签: regex apache url-rewriting proxy


    【解决方案1】:

    你需要用negated character class替换贪心点匹配:

    (?<=proxy\/)[^\/]+
    

    demo

    .* 是“贪婪的”(意味着它可以匹配尽可能多的字符而不是换行符),并且您尝试使用前瞻来限制匹配。事实上,否定字符类更安全、更高效。

    [^/] 仅表示 任何字符,但 /。因此,您可以完全省略前瞻。

    【讨论】:

    • 像魅力一样工作。谢谢。
    【解决方案2】:

    试试这个:(?&lt;=proxy\/)([^\/]+)

    【讨论】:

      【解决方案3】:

      我喜欢在句末使用否定比较

      你可以试试:

      (?&lt;=proxy\/)([^\s\/]+)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 2020-05-15
        • 2022-11-13
        • 2011-04-19
        • 2021-02-10
        • 2011-08-09
        相关资源
        最近更新 更多