1、正则表达式是一个String对象的字符序列,该字符序列中的字符具有特殊意义,而这些特殊字符称为正则表达式中的元字符;
2、String对象调用方法 public boolean matches(String regex),来判断当前 String对象 的字符序列 是否和 参数 regex 指定的正则表达式的字符序列匹配;
匹配则输出 true ;
不匹配则输出 false ;
如下代码↗:
import java.util.Scanner;
public class Regular_Expression {
public static void main(String[] args) {
String regex = "\\dabc"; //元字符 \\d
Scanner sc = new Scanner(System.in);
System.out.println("请输入匹配字符,并按enter键确认:");
for(int i=0;i<=15;i++){
String impo = sc.nextLine();
if(impo.matches(regex)){
System.out.println("字符匹配正确:"+impo);
}else{
System.out.println("字符匹配错误:"+impo);
}
} //for语句结束
}
}
代码中,regex = "\\dabc",\\d 就是元字符,代表意义是 0~9 中任意一个数字,而 abc 则是字符序列,只能输入 0abc、1abc、2abc、....、9abc 才匹配成功,当输入 10abc,aabc,+abc 都是错误的;
参数 regex 指定的正则表达式字符序列,一般可以包括:元字符,自定义字符序列,限定修饰符 ;
如代码中的 "\\dabc" ,只包含了 元字符 \\d ,自定义字符序列 abc ;
总结20种常见的元字符及其意义
常见元字符 | 正则表达式中的用法 | 所代表意义 |
. | . | 代表任何一个字符 |
\d | \\d | 代表 0 ~ 9 中的任何一个字符 |
\D | \\D | 代表任何一个 非数字 的字符 |
\s | \\s | 代表 空格类 字符,如 ‘\t’,‘\n’,‘\x0B’,‘\f’,‘\r’,空格 |
\S | \\S | 代表 非空格类 字符 |
\w | \\w | 代表可用于 标识符 的字符(只包括 字母,数字,下划线) |
\W | \\W | 代表 非标识符 的字符(字母,数字,下划线以外的字符) |
\p{Lower} | \\p{Lower} | 代表 小写字母 a ~ z 中的任何一个字符 |
\p{Upper} | \\p{Upper} | 代表 大写字母 A ~ Z 中的任何一个字符 |
\p{ASCII} | \\p{ASCII} | 代表 ASCII码表 中的任何一个字符 |
\p{Alpha} | \\p{Alpha} | 代表 字母 中的任何一个字符(大小写都可以) |
\p{Digit} | \\p{Digit} | 代表 0 ~ 9 中的任何一个字符 |
\p{Alnum} | \\p{Alnum} | 代表 字母 或 数字 中的任何一个字符(大小写都可以,0 ~ 9) |
\p{Punct} | \\p{Punct} | 代表 标点符号 中的任何一个字符(~ ! @ , . / ; ' [ \ ] ^ & % $ # 等等) |
\p{Graph} | \\p{Graph} | 代表 可视字符 ( \p{Alnum} \p{Punct} 的整合 ) |
\p{Print} | \\p{Print} | 代表 可打印字符 ( \p{Alnum} \p{Punct} 的整合 ) |
\p{Blank} | \\p{Blank} | 代表 空格 或 制表符 [\t] |
\p{Cntrl} | \\p{Cntrl} | 代表 控制字符 (\x00-\x1F\x7F) |
\u4E00-\u9FA5 | [\u4E00-\u9FA5] | 代表 汉字 中的任何一个字符 |
***** 在正则表达式中,可以用 方括号[ ] 扩起 若干个字符 来表示 一个元字符,该元字符代表 方括号 中的任何一个字符;
例如: regex = "[157]abc",那么 [157] 就是一个元字符,代表的意义是 1 、 5 、 7 中任何一个字符;
以下是一些常用的 自定义元字符:
[a-z] 代表 小写字母 a 到 z 中的任何一个字符;
[^A-Z] 代表 非大写字母 A 到 Z 中的任何一个字符;(^ 代表相反,以外,即只要不是 A 到 Z 中的任何一个字符都可以)
[a-zA-Z] 代表 a 到 z 或 A 到 Z 中任何一个字符都可以;
[0-5] 代表 0 到 5 数字中任何一个字符;
此外,中方括号中可以嵌套另一个方括号,进行 并、交、差 运算:
并 运算:[0-5[a-z]] 代表 0 到 5 或 a 到 z 中的任何一个字符;与上面 [a-zA-Z] 是一样效果的 ;
交 运算:[a-z&&[abc]] 代表 a 到 z 的范围内,只能 是 a b c 中的任何一个字符 ;
差 运算:[a-z&&[^abc]] 代表 a 到 z 的范围内,不能 是 a b c 中的任何一个字符 ;
****** && 可以理解为 与 的意思;
如下代码↗:
import java.util.Scanner;
public class Regular_Expression {
public static void main(String[] args) {
String regex = "\\D\\p{Lower}";
Scanner sc = new Scanner(System.in);
System.out.println("请输入匹配字符,并按enter键确认:");
for(int i=0;i<=15;i++){
String impo = sc.nextLine();
if(impo.matches(regex)){
System.out.println("字符匹配正确:"+impo);
}else{
System.out.println("字符匹配错误:"+impo);
}
}
}
}
代码中,\\D 表示非数字的字符,所以第一个字符不能是数字,\\p{Lower}表示小写字母 a 到 z ,所以第二个字符只能是 a 到 z
代码输出结果:
请输入匹配字符,并按enter键确认:
Aa
字符匹配正确:Aa
AA
字符匹配错误:AA
A1
字符匹配错误:A1
1A
字符匹配错误:1A
元字符中 . 是代表任何一个字符,当想使用普通意义上的 . 字符时,需要使用 [.] 或者 \56 来表示;
总结8种常见的限定修饰符及其意义
限定修饰符的表示 | 代表的意义 |
X? | 代表 X可以出现 0次 或 1次 |
X* | 代表 X可以出现 0次 或 多次 |
X+ | 代表 X可以出现 1次 或 多次 |
X{n} | 代表 X 只能 出现 n次 |
X{n,} | 代表 X 至少 出现 n次 |
X{n,m} | 代表 X可以出现 n 至 m 次 |
XY | 代表 X为前缀 Y为后缀 |
X|Y | 代表 X 或 Y |
限定修饰符的使用:
如下代码↗:
import java.util.Scanner;
public class Regular_Expression {
public static void main(String[] args) {
String regex = "[a-z][A-Z]?"; //元字符 \\d
Scanner sc = new Scanner(System.in);
System.out.println("请输入匹配字符,并按enter键确认:");
for(int i=0;i<=15;i++){
String impo = sc.nextLine();
if(impo.matches(regex)){
System.out.println("字符匹配正确:"+impo);
}else{
System.out.println("字符匹配错误:"+impo);
}
}
}
}
代码中,"[a-z][A-Z]?" 的 [A-Z]? 代表 大写字母 A 到 Z 中任何一个字母可以出现 0次 或 1次 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aA
字符匹配正确:aA
aAB
字符匹配错误:aAB
将以上代码改成 String regex = "[a-z][A-Z]*";
则 "[a-z][A-Z]*" 的 [A-Z]* 代表 大写字母 A 到 Z 中任何一个字母可以出现 0次 或 多次 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aA
字符匹配正确:aA
aAB
字符匹配正确:aAB
将以上代码改成 String regex = "[a-z][A-Z]+";
则 "[a-z][A-Z]+" 的 [A-Z]+ 代表 大写字母 A 到 Z 中任何一个字母可以出现 1次 或 多次 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aA
字符匹配正确:aA
aAB
字符匹配正确:aAB
将以上代码改成 String regex = "[a-z][A-Z]{5}";
则 "[a-z][A-Z]{5}" 的 [A-Z]{5} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE
aABCDEEE
字符匹配错误:aABCDEEE
将以上代码改成 String regex = "[a-z][A-Z]{5,}";
则 "[a-z][A-Z]{5,}" 的 [A-Z]{5,} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 或 5次以上 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE
aABCDEEE
字符匹配正确:aABCDEEE
将以上代码改成 String regex = "[a-z][A-Z]{5,8}";
则 "[a-z][A-Z]{5,8}" 的 [A-Z]{5,8} 代表 大写字母 A 到 Z 中任何一个字母必须出现 5次 到 8次之间 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aABCDE
字符匹配正确:aABCDE
aABCDEEEEE
字符匹配错误:aABCDEEEEE
将以上代码改成 String regex = "[a-z][A-Z]";
则 "[a-z][A-Z]" 的 [a-z] 为前缀 , [A-Z] 为后缀 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配错误:a
aAB
字符匹配错误:aAB
aA
字符匹配正确:aA
aa
字符匹配错误:aa
将以上代码改成 String regex = "[a-z]|[A-Z]";
则 "[a-z] | [A-Z]" 代表 可以是 a 到 z 中任何一个字符 ,也可以是 A 到 Z 中的任何一个字符 ;
代码输出结果:
请输入匹配字符,并按enter键确认:
a
字符匹配正确:a
aAB
字符匹配错误:aAB
A
字符匹配正确:A
aa
字符匹配错误:aa