如何从一串字符中提取IP地址

miaozhanlu 2003-05-30 02:43:26
如何从一串字符中提取IP地址?
比如:
abdk d2.2d9(,dsf ]t202.33.1.8yff
怎样将202.33.1.8提取出来。
谢谢。
...全文
1471 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgdb 2003-06-10
  • 打赏
  • 举报
回复 1
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+"
miaozhanlu 2003-06-04
  • 打赏
  • 举报
回复 1
beyond_xiruo好认真!
上述正则表达式我试了试,有点问题:
1. \.应为\\.
2.在匹配时还有问题
比如 串为:
“ ab3afd7 ([218.22.48.26])”

我也考虑过严格过滤问题,但没有想出正则如何写,于是,考虑提取出IP串后,用StringTokenizer逐个分解判断<255.

ytdmm 2003-06-03
  • 打赏
  • 举报
回复
正则表达式方法确实不错~~~~~~~~~~~
希偌 2003-06-03
  • 打赏
  • 举报
回复 1
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]))"
miaozhanlu 2003-06-03
  • 打赏
  • 举报
回复
IP地址的第一位可不都是三个数字。可能是61.92.32.111

谢谢beyond_xiruo,我准备结帖了,我给你加50分。再次感谢!
阎罗 2003-06-02
  • 打赏
  • 举报
回复
你可以有indexof方法来提取第一次出现在小数点前面的三位数啊,
希偌 2003-06-02
  • 打赏
  • 举报
回复
IP地址的第一位都是三个数字
miaozhanlu 2003-06-02
  • 打赏
  • 举报
回复 1
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兄的算法基本可行,但似乎稍逊正则表达式解法。谢谢。

ytdmm 2003-05-30
  • 打赏
  • 举报
回复
一个算法问题,可以这样考虑:

先把字符串中所有的"."找出来;依次考查连续的三个".",如果它们的中间是两个整数,并且左右两边也有两个整数(都<1000),那么这个子串就是IP地址了。
希偌 2003-05-30
  • 打赏
  • 举报
回复 1
正则表达式
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);
trust_me 2003-05-30
  • 打赏
  • 举报
回复
就算能够勉强做到,也会有很多的bug,例如:abdk d2.2d9(,dsf ]t5202.33.1.82yff
而你的ip是202.33.1.8,我真的不知道你该怎么把ip拿出来!
难道你得到的这个字符串就是这么凌乱的码???
miaozhanlu 2003-05-30
  • 打赏
  • 举报
回复
源串放入string中,IP地址是有一定规则的(数字且以3个点分隔)。
希望能提供相对现成的算法描述。
谢谢。

newman0708 2003-05-30
  • 打赏
  • 举报
回复
你又没有固定保存方法,当然不好找了。

但是办法总是的吗!

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧