Java正则表达式
Java.util.regex包
匹配规则:从左到右依次匹配
\为转义字符
我们要匹配字符串“a&c” 正则表达式编写为"a\&c",转为java字符串还要加上一个\转义为“a\\&c"
如果匹配“a和c",非ASCII字符--和字需要用\u###表示
为”a\u548cc"
.可以匹配任意一个字符,占位
\d可以匹配一个数字
\w可以匹配一个字母、数字或下划线"java\w" 可以匹配:javac、java8、java_
\s可以匹配一个空白字符"A\sB" ,tab也算一个空白字符
匹配A B、A B (中间是Tab)
\D匹配非数字
\W可以匹配一个非字母、数字或下划线
\S可以匹配一个非空白字符"A\SB" 匹配A#B、AaB
修饰符
*为修饰符,修饰前一个表达式,这里前一个为\d,可以匹配任意个字符 "A\d*" 匹配A、A1、A007
修饰符+可以匹配至少一个字符“A\d+"匹配A1、A007
修饰符?可以匹配0个或1个字符,"A\d?"匹配A、A1
修饰符{n}表示i可以匹配n个字符,如"\d{6}"
修饰符{n,m}可以匹配n-m个字符,"\d{3,5}"匹配3到5个字符
修饰符{n,}可以匹配至少n个字符,"\d{3,}"匹配至少3个字符
分组匹配
(…)可以分组:“(\d{4})\-(\d{1,2})\-(\d{1,2})”
这个“-”也要转义
"^"表示开头,$表示结尾,小括号括起来可以直接提取区号和号码
提取小时和分钟
java中写法
[…]可以匹配范围内的字符:"[a-f]1" 匹配a1、b1、f1
“[a-f0-9]{6}”表示a-f和0-9之间任意字符组成的6个字符
如:1a1a9f、ffffff、000000
[^…]可以匹配非范围内的字符"[^0-9]{6}"
AB|CD匹配AB或CD
可以括起来,括号在|中很重要
总结
正则表达式默认使用贪婪匹配,尽可能多的向后匹配
非贪婪匹配
?可以表示0个或者1个,也可以表示非贪婪匹配
使用?表示非贪婪匹配
下图第一个问号表示匹配1个或者0个数字,第二个问号表示非贪婪匹配,尽可能少匹配所以就表示匹配了0个数字
搜索和替换
使用正则表达式分割字符串
下图是java中写法\,表示逗号\为转义,java中要用\再次转义,前面的\。所以,写成\\,
find为boolean类型
提取句子中每一个单词
连续空格替换为一个空格
$1表示反向引用前面匹配到的第一个分组$2表示第二个