正则表达式描述了一种字符串的匹配模式,可以对指定的字符串进行检查,常用来对用户的输入值做校验。使用方式如下:
1.次数匹配
*:表示前面的子表达式可以出现零次到多次
?:表示前面的子表达式可以出现零次到一次
+:表示前面的子表达式可以出现一次到多次
String str = "javaaaa";
System.out.println(str.matches("java+"));//true
System.out.println(str.matches("java?"));//false
System.out.println(str.matches("java*"));//true
2.字符 符号的匹配
\d:用来匹配数值符号 0-9
\w:匹配a-z A-Z 0-9
\s:匹配任何空白字符,包括空格、制表符、换页符等等, 等价于 [\f\n\r\t\v]
.:匹配任意字符 除了换行\n
\\.:匹配实心点.
String str = "java2342";
// \d 用来匹配数值符号 0-9
System.out.println("\\d: " + str.matches("java\\d+"));
// \w 匹配a-z A-Z 0-9 _
System.out.println("\\w: " + str.matches("\\w+"));
// \s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于 [\f\n\r\t\v]
System.out.println("\\s: " + str.matches("\\w+\\s\\d+"));
// . 匹配任意字符 除了换行\n
System.out.println(". : " + str.matches(".+"));
// \\. 就只是匹配 实心点 .
System.out.println("\\. : " + str.matches("\\w+\\."));
3.[ ] 中括号匹配任意一个字符
范围匹配:a-z A-Z 0-9
或:|
[^ ] :除了[ ]的任意一个字符都可以
{n}:表示前面的字符出现n次
{m,n}:表示前面的字符最少出现m次,最多出现n次
public static void method4() {
// 模式
String regEx = "1[3-9]\\d{9}";
String str = "10678966661";
System.out.println(str.matches(regEx));
String str2 = "a&c";
System.out.println("[]: " + str2.matches("a[bcd23456]c"));
// 范围匹配 a-z A-Z 0-9
System.out.println("[0-9]: " + str2.matches("a[0-9a-z]c"));
// | 或
System.out.println("[||]: " + str2.matches("a[3|a|b]c"));
// 匹配[^] 除了[]的任意一个字符都可以
System.out.println("[^ ]: " + str2.matches("a[^3ab]c"));
}
4.分组
要使用()中括号现将正则正则表达式进行分组
Pattern pattern = Pattern.compile(regex);//加载regex到模式( Pattern)类
Matcher matcher = pattern.matcher(str);//调用模式的matcher()方法并且将str传入 得到匹配器
matcher.matches();//调用匹配器的matchers方法 返回是否匹配 boolean值
macher.group(0);//获取组信息 第0组是整个字符串
public static void method5() {
String str = "23555@qq.com";
Pattern pattern = Pattern.compile("(\\w+)@(qq.com)");
Matcher matcher = pattern.matcher(str);
// 一定要先匹配才能根据组号 获取组的信息
if (matcher.matches()) {
System.out.println("======");
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
}