正则表达式,匹配没有“http://”的URL和任何其他“/”

时间:2012-12-04 13:45:33

标签: java regex url expression

我环顾了一会儿,但可能我不能用适当的关键词“谷歌”..所以我在这里。 我需要将url剥离协议匹配到first /

目标:匹配http://中的第一个子字符串/第一个/(可能是最后/不存在)或结束 这里出现了一个问题:

我写了这个正则表达式

  

(小于?= //)(?*)(?= /)

但是这个正则表达式只匹配url,最后除了协议之外至少有1'/'..

这里有一些匹配的网址:

  • http:// www.google.com /(与我的正则表达式匹配)
  • 的http:// www.google.com
  • 的https:// www.google
  • xxx:// www.google.com / hello / bleh blah ...... /
  • XXX:// google.com
  • google.com /blah/hello.php?x=11_x.hi

4 个答案:

答案 0 :(得分:0)

^(?:\w+://)?([\w.-]+)/?.*$

(Java的双反斜杠) 似乎适用于您的所有示例,包括简单的www.google.com

答案 1 :(得分:0)

像...一样的东西。

^(https?:\/\/)?([0-9a-zA-Z][-\w]*[0-9a-zA-Z\.)+[a-zA-Z]{2,6})\/

我在一本书中看到了这一点。这应该考虑变量http / https,禁止空格,并可能停在第一个斜杠。

评论我是否做错了。

答案 2 :(得分:0)

这适用于你的所有例子,但是最后一个:

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

[^/\\s]是一个否定的字符类,匹配除/\s之外的所有字符(空格,例如空格,制表符或换行符)

here on Regexr

最后一行不起作用。您想如何决定什么是链接?如果我将第一部分设为可选,则它将匹配除/和空格之外的每个字符。

答案 3 :(得分:0)

好像你有正确的答案,但你错过了没有尾随“/”的可能性。试试这个:

(?<=//)(.*?)(?=/|$)