①正则表达式的语法:
下表显示了正则表达式的语法:
表 1.1 正则表达式语法
|
字符类 | |
---|---|
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
边界匹配器 | |
---|---|
^ | 行的开头 |
$ | 行的结尾(注意是行的结尾,不是字符串的结尾,匹配某一个字符为结尾的只要把该字符放在正则表达式最末尾就好了) |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
组
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个组。使用\n 其中n=0,1,2,3可以获得当前规则的第n个组 $n可以获得前一个规则的第n个组
str.replaceAll("(.)\\1+", "$1");
(.)表示组1 然后\1表示和组1一样的数据 $1使得组1向后引用,也等于(.)表示的一样的数据。该行代码用于删除重复字符。
Pattern标记
CASE_INSENSITIVE(启用不区分大小写的匹配) ☆☆
MULTILINE(启用多行模式,此时^、$匹配的是一行的行首和行尾,而不是输入序列的行首行尾) ☆☆
②正则表达式的使用(匹配、切割split、替换replace)☆☆☆
String str = "123344"; //要匹配的字符串
1.把正则表达式封装成对象
String reg = "//d+"; //正则表达式
Pattern pattern = Pattern.compile(reg); //把正则表达式封装成对象
2.创建匹配器,与要匹配的字符串相关联。
通过调用模式的 matcher
方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
-
matches
方法尝试将整个输入序列与该模式匹配(即和该模式要从头到尾都要匹配,即要输入序列要完全等于它)。 -
lookingAt
尝试将输入序列从头开始与该模式匹配。 -
find
方法扫描输入序列以查找与该模式匹配的下一个子序列(匹配的只是一个子序列,只要输入序列中有它即可,既可以通过循环可能可以找到多个这样的子序列)。
每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。
Matcher matcher = pattern.matcher(str);