【Java学习】正则匹配IP
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。
摘自:百度百科[1]
IP地址格式
IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位
用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。
// 0.0.0.0 ~ 255.255.255.255
根据规则:每段相同,范围都在 0 ~ 255
0~255 对应的正则表达式为(2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}
下面简单介绍它的组成
2(5[0-5]|[0-4]\d)
匹配:200 ~ 255[0-1]?\d{1,2}
匹配:0 ~ 199
0 到 255 的式子已经写出来了,那么一共四段再加上中间的点就很容易了
后边“点”和“数字”重复三次就可以了
(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

屏幕快照 2019-06-30 下午2.13.37.png
- 提取一段内容中的所有IP地址
((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
- 判断字符串是否是IP地址
^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$
下边是各种语言的程序代码:(使用“在线工具[2]”生成)
js
var pattern = /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/g,
str = '';
console.log(pattern.test(str));
php
$str = '';
$isMatched = preg_match_all('/((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/', $str, $matches);
var_dump($isMatched, $matches);
go
package main
import (
"fmt"
"regexp"
)
func main() {
str := "test"
matched, err := regexp.MatchString("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}", str)
fmt.Println(matched, err)
}
rb
pattern = /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/
str = ''
p pattern.match(str)
python2
import re
pattern = re.compile(ur'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
str = u''
print pattern.search(str)
python3
import re
pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
str = ''
print(pattern.search(str))
java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main(String args[]) {
String str = "";
String pattern = "((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
System.out.println(m.matches());
}
}
objc
NSString *str = @"";
NSString *pattern = @"((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options: nil error: &error];
NSArray *match = [regex matchesInString: str options: NSMatchingCompleted range: NSMakeRange(0, [str length])];
if (match.count != 0) {
// ...
}
经过大量数据测试,均可完美匹配,例如:001.001.001.001 依然是OK的,如有问题敬请指出,会第一时间回复
作者:简了个书1993
链接:https://www.jianshu.com/p/82886d77440c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:gtea
博客地址:https://www.cnblogs.com/gtea
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!