我正在尝试构建一个Regex来过滤网址。
我需要一个正则表达式来匹配以下情况:
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\/)(.*)(?=\/)
过滤网址非常正确,但依赖于第二个斜杠。第二个斜杠是可选的,所以我的正则表达式不起作用。
答案 0 :(得分:2)
您需要将贪婪点匹配替换为negated character class:
(?<=proxy\/)[^\/]+
请参阅demo
.*
是“贪婪的”(意味着它可以匹配除换行符之外的多个字符),并且您尝试使用前瞻限制匹配。实际上,否定的字符类更安全,更有效。
[^/]
仅表示除/
之外的任何字符。因此,您可以完全省略前瞻。
答案 1 :(得分:1)
试试这个:(?<=proxy\/)([^\/]+)
答案 2 :(得分:0)
我喜欢在句子末尾使用否定比较
您可以尝试:
(?<=proxy\/)([^\s\/]+)