如何从一串字符中提取IP地址 源串放入string中,IP地址是有一定规则的(数字且以3个点分隔)。希望能提供相对现成的算法描述。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就算能够勉强做到,也会有很多的bug,例如:abdk d2.2d9(,dsf ]t5202.33.1.82yff而你的ip是202.33.1.8,我真的不知道你该怎么把ip拿出来!难道你得到的这个字符串就是这么凌乱的码??? 正则表达式String parentString="abdk d2.2d9(,dsf ]t202.33.1.8yff";String regexString=".*(\\d{3}(\\.\\d{1,3}){3}).*";String IPString=parentString.replaceAll(regexString,"$1");System.out.print(IPString); 一个算法问题,可以这样考虑:先把字符串中所有的"."找出来;依次考查连续的三个".",如果它们的中间是两个整数,并且左右两边也有两个整数(都<1000),那么这个子串就是IP地址了。 beyond_xiruo的正则表达式方法太棒了!佩服但有点小问题,上述做法对字符串 "abdk d2.2d9(,dsf ]t20,2.33.1.8yff" IP的第一个地址前加入了逗号,就无法正确给出,可能需改动正则表达式,但我不知怎么改。我简单扩展了一下功能。使能处理上述情况且可提出多个IP地址串。代码示例: String regexString="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"; Pattern p = Pattern.compile(regexString); String parentString="abdk d2.2d9(,dsf ]t20,2.33.1.8yff"; Matcher m = p.matcher(parentString); boolean result = m.find(); while(result) { System.out.println(m.group()); result = m.find(); }另外,感谢其它各位仁兄的建议。 其中ytdmm兄的算法基本可行,但似乎稍逊正则表达式解法。谢谢。 你可以有indexof方法来提取第一次出现在小数点前面的三位数啊, IP地址的第一位可不都是三个数字。可能是61.92.32.111谢谢beyond_xiruo,我准备结帖了,我给你加50分。再次感谢! sorry,严格来说的话,IP地址最匹配的正则表达式为:"(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))" beyond_xiruo好认真!上述正则表达式我试了试,有点问题: 1. \.应为\\. 2.在匹配时还有问题 比如 串为: “ ab3afd7 ([218.22.48.26])” 我也考虑过严格过滤问题,但没有想出正则如何写,于是,考虑提取出IP串后,用StringTokenizer逐个分解判断<255. xiruo的方法不错不过最后一段匹配有问题"(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\\.\\d+" 在java AWT 中怎么隐藏TextArea的光标? java开发中JComboBox2在可编辑状态下怎样获取手动输入的值? 怎么样在jbuilder 中生成win32可执行程序 在线等十万火急,applet在本地打开可以使用,在服务器使用不了 理行承诺,请hui_feng(盘桃2)来接分。 JRUN4 正常安装但是启动不到·· 请问JAVA中有实现拷贝文件的类和方法吗? 请教:如何利用optimizeit检测servlet/jsp内存泄漏? import的问题 怎么活动双击一棵树上的叶子节点的实践? 这样一个简单的问题 linux下没有图形窗口如何在servlet中绘制图象?
而你的ip是202.33.1.8,我真的不知道你该怎么把ip拿出来!
难道你得到的这个字符串就是这么凌乱的码???
String parentString="abdk d2.2d9(,dsf ]t202.33.1.8yff";
String regexString=".*(\\d{3}(\\.\\d{1,3}){3}).*";
String IPString=parentString.replaceAll(regexString,"$1");
System.out.print(IPString);
但有点小问题,上述做法对字符串
"abdk d2.2d9(,dsf ]t20,2.33.1.8yff"
IP的第一个地址前加入了逗号,就无法正确给出,可能需改动正则表达式,但我不知怎么改。我简单扩展了一下功能。使能处理上述情况且可提出多个IP地址串。代码示例: String regexString="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
Pattern p = Pattern.compile(regexString);
String parentString="abdk d2.2d9(,dsf ]t20,2.33.1.8yff";
Matcher m = p.matcher(parentString);
boolean result = m.find();
while(result) {
System.out.println(m.group());
result = m.find();
}另外,感谢其它各位仁兄的建议。
其中ytdmm兄的算法基本可行,但似乎稍逊正则表达式解法。谢谢。
"(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))"
上述正则表达式我试了试,有点问题:
1. \.应为\\.
2.在匹配时还有问题
比如 串为:
“ ab3afd7 ([218.22.48.26])”
我也考虑过严格过滤问题,但没有想出正则如何写,于是,考虑提取出IP串后,用StringTokenizer逐个分解判断<255.
不过最后一段匹配有问题
"(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\\.\\d+"