Pattern 表示正则表达式,经过编译得到的正则表达式
Matcher 匹配器
java在字符串中提供了四个方法 直接支持正则表达式
1 matches
2 replaceAll
3 replaceFirst
4 split
正则语法
`[ ] ` 代表单个字符串
[ab] a或者b
[a-z] 所有小写字母
[a-zA-Z] 所有字母
[a-zA-Z0-9_] 数字字母下划线
[^ab] 不是a或者b
[\\w] 等价 [a-zA-Z0-9_]
\w word 单词字符串
[\\W] 等价 [^\\w] [^a-zA-Z0-9_]
[\\d] [0-9]
[\\D] [^0-9]
[\\s] 空白字符 空格 \r \n \t
[\\S] 非空白字符
. 表示任意字符 除了:\r \n
\\. 只表示 .
^ 开头
$ 结尾
数量词:
a{2} 正好两个a
a{2,} 至少两个a
a{2,5} 至少两个a 至多5个a
a+ 至少一个a
a* 至少零个a
a? 零个或一个a
abc|d abc或d
ab(c|d) adc或者abd
示例代码
判断电话
String str = "18888888888";
boolean matches = str.matches("1[3-9]\\d{9}");
判断邮箱
String str = "
888888888@qq.com";
String str2 = "
888888888@qq.com.cn";
boolean matches1 = str.matches("\\d{3,10}@qq\\.(com|com\\.cn)");
boolean matches2 = str2.matches("\\d{3,10}@qq\\.(com|com\\.cn)");
System.out.println(matches1);
System.out.println(matches2);
替换
replaceAll
replaceFirst
String str = "abc123abc1abc";
System.out.println(str.replaceAll("\\d+", ""));//abcabcabc
System.out.println(str.replaceFirst("\\d+", ""));//abcabc1abc
去叠词
String str = "你你你你你好好好好啊啊啊";
System.out.println(str.replaceAll("(.)\\1+","$1"));//你好啊
取数字
String str = "abc123abc1abc";
System.out.println(str.replaceAll("\\D",""));//1231
//切割的时候 中间和前面的空字符串会被保留 末尾的空字符串会被省略
String[] data = str.split("\\D");
System.out.println(Arrays.toString(data));
//[, , , 123, , , 1] String[] data1 = str.split("\\D+");
System.out.println(Arrays.toString(data1));//[, 123, 1]
ip中取数字
String str = "192.168.1.1";System.out.println(str.replaceAll("\\.",""));
正则表达式 所有库的所有表
比如 database.table
.*\\..* 啥意思-> .*代表所有的库 \\. 代表一个. .*代表所有的表
文件中去数字
a.txt 内容为
abc123abc123
%s/\d//g -> %s删除 /d 所有数字 //g全局