正则表达式在第一个和第二个斜杠

时间:2015-09-15 11:26:41

标签: regex apache url-rewriting proxy

我正在尝试构建一个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\/)(.*)(?=\/)过滤网址非常正确,但依赖于第二个斜杠。第二个斜杠是可选的,所以我的正则表达式不起作用。

3 个答案:

答案 0 :(得分:2)

您需要将贪婪点匹配替换为negated character class

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

请参阅demo

.*是“贪婪的”(意味着它可以匹配除换行符之外的多个字符),并且您尝试使用前瞻限制匹配。实际上,否定的字符类更安全,更有效。

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

答案 1 :(得分:1)

试试这个:(?<=proxy\/)([^\/]+)

答案 2 :(得分:0)

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

您可以尝试:

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