1、IPv4的正则表达式
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
验证并解释正则表达式
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@SpringBootTest
class DemoXxlJobApplicationTests {
/**
* ^ 表示匹配字符串的开头。
* (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 表示一个数字的范围,可以是 0 到 255 之间的数。
* 即 25[0-5] 匹配范围在 250 到 255 之间的数字。2[0-4][0-9] 匹配范围在 200 到 249 之间的数字。
* 第一位数字为 2,第二位数字为 0 到 4,第三位数字为 0 到 9。
* [01]?[0-9][0-9]? 匹配范围在 0 到 199 之间的数字。第一位数字可以为 0 或 1(可选),第二位和第三位数字可以为 0 到 9。
* \\. 表示匹配句点(.),需要使用两个反斜杠来转义。
* {3} 表示前面的表达式重复三次,即匹配三个数字和句点的组合。为啥是{3}而不是{4},因为最后一次没有(.)。
* (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 表示最后一个数字的范围,与前面的数字范围相同。
* $ 表示匹配字符串的结尾。
*/
private static final String IP_PATTERN_4 =
"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
private static final Pattern pattern4 = Pattern.compile(IP_PATTERN_4);
private void checkIP() {
String ipAddress4 = "42.123.97.36";
Matcher matcher4 = pattern4.matcher(ipAddress4);
if (matcher4.matches()) {
System.err.println("合法IPv4");
} else {
System.err.println("非法IPv4");
}
}
@Test
void contextLoads() {
checkIP();
}
}
2、IPv4或6的正则表达式
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
验证并解释正则表达式【这里拿IPv4作对比】
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@SpringBootTest
class DemoXxlJobApplicationTests {
private static final String IP_PATTERN_4 =
"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
private static final Pattern pattern4 = Pattern.compile(IP_PATTERN_4);
/**
* ^ 表示匹配字符串的开头。
* (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3} 表示匹配IPv4地址的前三个数字和句点的组合,重复三次。这部分与之前解释的IPv4正则表达式相同。
* (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 表示匹配IPv4地址的最后一个数字的范围,与之前解释的IPv4正则表达式相同。
* \\. 表示匹配句点(.),需要使用两个反斜杠来转义。
* (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ 表示匹配以IPv4地址结尾的字符串。
* 或者:
* ^ 表示匹配字符串的开头。
* ([0-9a-fA-F]{1,4}:){7} 表示匹配IPv6地址的前七个以冒号(:)分隔的十六进制数字组合,每个数字组合可以包含 1 到 4 位的十六进制数字。
* [0-9a-fA-F]{1,4} 表示匹配一个十六进制数字组合,可以包含 1 到 4 位的十六进制数字。
* $ 表示匹配字符串的结尾。
*/
private static final String IP_PATTERN =
"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$";
private static final Pattern pattern4or6 = Pattern.compile(IP_PATTERN);
private void checkIP() {
String ipAddress4 = "42.123.97.36";
Matcher matcher4 = pattern4.matcher(ipAddress4);
String ipAddress4Or6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
Matcher matcher4Or6 = pattern4or6.matcher(ipAddress4Or6);
if (matcher4.matches()) {
System.err.println("合法IPv4");
} else {
System.err.println("非法IPv4");
}
if (matcher4Or6.matches()) {
System.err.println("合法IPv4or6");
} else {
System.err.println("非法IPv4or6");
}
}
@Test
void contextLoads() {
checkIP();
}
}
接下来会慢慢更新项目里用过的正则表达式。。。