正则表达式中的IP提取与质数判断
IP提取
判断IP是否合法的正则表达式网络上有很多,一般只需注意IP的数值边界就可以。以下就是Java中该类正则表达式的写法:
((2[0-4]\\d|25[0-5]|1\\d\\d|\\d\\d?)\\.){3}(2[0-4]\\d|25\\d|1\\d\\d|\\d\\d?)
但直接用上面的正则表达式抽取文本文件中的IP存在一个问题,虽然这里考虑了0-255边界的问题,但诸如“Current IP: 2255.0.0.1”中的“2255.0.0.1”还是会以“255.0.0.1”的方式被抽取出来。实际上这是一个不合法的IP,并不应该被匹配。
为了解决这个问题,考虑过用正则表达式中的零宽度匹配。不过这里给出的是另外一种解决方案,利用正则分组的方式。代码如下:
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { List<String> extract(String line) { List<String> ret = new ArrayList<>(); if (line != null) { String regex = "(^|[^\\d])(((2[0-4]\\d|25[0-5]|1\\d\\d|\\d\\d?)\\.){3}(2[0-4]\\d|25\\d|1\\d\\d|\\d\\d?))"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(line); while (m.find()) { ret.add(m.group(2)); } } return ret; } public static void main(String[] args) { String line = "Current IP: 192.168.1.1, 2255.0.0.1 and 1.0.0.0"; System.out.println(new Test().extract(line)); } }

浙公网安备 33010602011771号