用于在第一个和可选的第二个斜杠之间过滤 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\/]+)