2014-10-29 423 views
-1

需要建立一个正则表达式如下:如何构建主机名的正则表达式?

x.x.x.x 

以上代表一些主机名,其中X可能是一组字符/数字的和必须只有3个点。

我尝试了一些东西,但在某些情况下失败了。

+1

你可以上传你尝试过什么。 – manouti 2014-10-29 10:01:36

+1

为什么要将主机名上的点数限制为三个?这仅适用于IP地址,主机名可以采用i.dont.like.google.so.i.will.search.using.bing.com的形式,例如...考虑检查三点数字字符串,或任意数量的点主机名字符串。 – 2014-10-29 10:20:06

+0

将来会出现主机名中的Unicode字符,而主机名不仅限于4个部分。 URL的主机部分可以包含IP(v4和v6)或域名。 – nhahtdh 2014-10-29 10:40:25

回答

1

你可以用这一个尝试:

String regex = "[a-z0-9]+[\\.]{1}[a-z0-9]+[\\.]{1}[a-z0-9]+[\\.]{1}[a-z0-9]+"; 

解释:

  • [a-z0-9]+一组或字符/数字匹配与1
  • [\\.]{1}匹配一个. sympol最小长度。 {1}表示长度为1,但您也可以使用[.]\\.
  • 上述两个规则重复几次

由于@Calvin Scherle提到的,可以缩短正则表达式:

String regex = "\\w+\\.\\w+\\.\\w+\\.\\w+"; 

解释:

  • \w+将每一组搭配的字符(包括字母和数字)的最小长度为1
  • \.将匹配.符号
  • 在Java中,\元字符和来转义,因此,我们将有\\w+\\.
  • 上述两个规则重复几次
+0

为什么不只是'\ w + \。\ w + \。\ w + \。\ w +'起作用? – 2014-10-29 10:06:19

+0

它会的,你说得对。 – 2014-10-29 10:07:37

+0

后续问题,为什么你在字符类中使用两个反斜杠而不是一个字符? – 2014-10-29 10:09:16

1

您可以使用String.matches("[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+")

进行测试它将匹配由3个点分隔的任何字母数字字符。

  • [a-zA-Z0-9]是一组匹配任何字母数字字符的组。
  • +的意思是 “寻找一个或多个正好”
  • \\.意味着字面.字符
1

试试这个:

String regex = "[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]"