正则表达式忽略空间

时间:2014-01-28 17:05:01

标签: java regex

经过大量尝试,我设法创建了以下正则表达式。我想用它来防止IP的垃圾邮件。

([0-9]{1,3}(\.+|\s+)){3}[0-9]{1,3}

如果写得正确,这将捕获所有的ips

例如8.8.8.8

然而,它与"8. 8. 8. 8""8 .8 .8 .8"不匹配 \s*

但是我似乎没有让它工作,任何人都可以帮助我,并解释我需要放置\s*以忽略其间的空间

关心Jurre

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式在IP地址中的任何位置允许白色间距:

^\s*([0-9]{1,3}\s*\.\s*){3}[0-9]{1,3}\s*$

在线演示:http://regex101.com/r/zZ9kH6

答案 1 :(得分:1)

^\s*(?:(?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)\s*(?:\.\s*(?=[0-9])|(?![0-9]))){4}$

应该这样做。

要打破这种局面,

  1. (?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)匹配[0,255]范围内最多三位数的任何非负十进制整数。
  2. \s*匹配零个或多个空格。
  3. (?:\.\s*(?=[0-9])|(?![0-9]))匹配点和空格后跟更多数字或数字结尾
  4. {4}需要重复四次
  5. 为了使其更具可读性,您可以将其分解:

    String INT_IN_0_TO_255 = "(?:[2](?:[5][0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)";
    String OPTIONAL_SPACE = "\\s*";
    String DOT_BEFORE_MORE_NUMBERS = "(?:\.\s*(?=[0-9])|(?![0-9]))";
    String NUMERIC_IP_ADDRESS =
       "^"
       + OPTIONAL_SPACE
       + "(?:"
       + INT_IN_0_TO_255
       + OPTIONAL_SPACE
       + DOT_BEFORE_MORE_NUMBERS
       + "){4}$";