[ ] // 例如 [abc] 代表一个a或者一个b或者一个c
" " // 例如 "abc" 代表连续的一个字符串abc
* 表示0次以上, + 表示1次以上, ? 表示0次或1次。
{n}表示固定n次,{n,}表示n次及以上,{n,m}表示n到m次
^ // 开始边界 例如"^a" 代表以a开始
$ // 结束边界 例如 "b$" 代表以b结束
备注:字符串和正则类的""中的规则默认都是有开始^和结束$的,默认省略不写。
"^[abc]$"等价与"[abc]"
( ) // 例如 ([abc])(abc) 1组是一个字符a或b或c, 2组是一个字符串abc
| // 或 例如 "ab | bc" 一个字符串ab或bc
^ // 非 在[ ] 中 例如 [^a] 代表 a以外的字符
(?i) // 例如 "ab(?i)[a-z]+" 代表忽略(?i)后字母的大小写,"a((?i)b)[a-z]+"只忽略b大小写
\d 代表[0-9], \D 代表[^0-9]
\w 代表[a-zA-Z0-9_] , \W 代表[^a-zA-Z0-9_]
\n 换行,\t 指标, \b 边界符匹配\w以外任意,. 点匹配换行以外任意。
[ ] 中 除了^和-,和预定义字符,其他符号会失去意义。如果需要输出^ - 或预定义的字符串,则需要\做转义 例如:\\代表一个\,\^代表一个^字符。
下记方法底层都是调用正则类,所以多次调用最好用正则类的方式。
重要:不加量词默认只能是1个。
"1ab3".matches("[abc]+") // false 判断是否完全满足一个以上a或b或c
"abaca".matches("[abc]+") // true ,java字符串\需要转移所以已定义写法"13".matches("\\d+");
"1ab3".replace("a", "z"); // 返回1zb3,将a替换成z,replace只能指定字符串,不能指定正则
"abacad".replace("a", "z"); // 返回zbzczd
"1ab3".replaceAll("[abc]", "z"); // 返回1zz3
"abacad".replaceAll("[abc]", "z"); // 返回zzzzzd
字符串.replaceAll("(正则)|(正则)", "<$1>") // $1代表第一组正则,本语句可以将满足第一组正则的字符替换为<加正则元字符加>。相当于把满足规则的字符用<>包起来。
例如:"a1b2a5d".replaceAll("([abc])","<$1>"); 得到 "125d"
"1a3".split("[abc]") // 返回 数组 ["1","3"]
"a1b2a5d".split("[abc]") // 返回 数组 ["","1","2","5d"]
1. 定义规则:Pattern p = Pattern.compile("正则") // 编译正则 例如
2. 关联字符串: Matcher m = p.matcher(字符串) // 例如
3. 做处理:
m.find() // 是否部分匹配,while(m.fing()) { m.start()//当前配置字符开始下标,m.end()// 结束下标,m.group(0)获取匹配字符串,}
m.matches() // 是否全部匹配,m.group(下标) 0:全文字符串,1:满足第一个()分组的字符串
例如:Pattern p = Pattern.compile("([abc]+)|(..[0-9]{1})");
Matcher m2 = p.matcher("abaca");
m.group(1) // "abaca"
m.group(2) // null
匹配规则默认从左到右
正常逻辑
Pattern p = Pattern.compile("(\\d+)(0+)");
Matcher m = p.matcher("1230"); // m.group(0)=1230, m.group(1)=123, m.group(2)=0
贪婪匹配(在保证后面规则基础上,会尽量满足前面规则)
Pattern p = Pattern.compile("(\\d+)(0+)");
Matcher m = p.matcher("12300"); // m.group(0)=12300, m.group(1)=1230, m.group(2)=0
非贪婪匹配(在左侧规则量词后加?,优先其他正则组)
Pattern p = Pattern.compile("(\\d+?)(0+)");
Matcher m = p.matcher("12300"); // m.group(0)=12300, m.group(1)=123, m.group(2)=00
1,字符串,是否包含,满足规则的正则。正则类Matcher.find()
2,字符串,是否完全满足规则。正则类Matcher.matches(), 字符串.matches(正则)
3,查询,满足规则的字符。正则类 Matcher.find() ,Matcher.group(0)
4,替换,满足规则的字符。正则类Matcher.replaceAll(字符), 字符串.replaceAll(正则, 字符)