用于在第一个和可选的第二个斜杠之间过滤 URL 的正则表达式
Regex to filter URL between first and optional second slash
我正在尝试构建一个正则表达式来过滤 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,但取决于第二个斜杠。第二个斜杠是可选的,所以我的正则表达式不能解决问题。
试试这个:(?<=proxy\/)([^\/]+)
您需要用 negated character class:
替换贪心点匹配
(?<=proxy\/)[^\/]+
见demo
.*
是 "greedy" (意味着它可以匹配除换行符以外的尽可能多的字符),并且您试图限制与前瞻性的匹配。其实取反字符class更安全,效率更高。
[^/]
仅表示 除 /
之外的任何字符。因此,您可以完全省略前瞻。
我喜欢在句末使用否定比较级
您可以试试:
(?<=proxy\/)([^\s\/]+)
我正在尝试构建一个正则表达式来过滤 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,但取决于第二个斜杠。第二个斜杠是可选的,所以我的正则表达式不能解决问题。
试试这个:(?<=proxy\/)([^\/]+)
您需要用 negated character class:
替换贪心点匹配(?<=proxy\/)[^\/]+
见demo
.*
是 "greedy" (意味着它可以匹配除换行符以外的尽可能多的字符),并且您试图限制与前瞻性的匹配。其实取反字符class更安全,效率更高。
[^/]
仅表示 除 /
之外的任何字符。因此,您可以完全省略前瞻。
我喜欢在句末使用否定比较级
您可以试试:
(?<=proxy\/)([^\s\/]+)