正则表达式
2023年9月28日大约 2 分钟
正则表达式
概念
提示
- Java中是贪婪匹配,在Java中转义用
\\
- 中括号
[]
中的元字符表示匹配元字符本身,如:[.]
等价于匹配.
本身,等价于\\.
分组、捕获、反向引用
定为符
字符 | 描述 | |
---|---|---|
^ | 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。 | |
$ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。 | |
\b | 匹配一个单词边界,即字与空格间的位置。匹配一个词的边界。一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者前面跟其他“字”字符的位置,例如在字母和空格之间。注意,匹配中不包括匹配的字边界。换句话说,一个匹配的词的边界的内容的长度是 0 | |
\B | 非单词边界匹配。 |
分组
分组分为捕获分组和非捕获分组
- 捕获分组
用圆括号()
将所有选择项括起来,相邻的选择项之间用 | 分隔。
()
表示捕获分组,()
会把每个分组里的匹配的值保存起来, 多个匹配值可以通过数字 n 来查看(n 是一个数字,表示第 n 个捕获组的内容)。
matcher.group(0)表示匹配到的内容
matcher.group(1)表示匹配到的第1个分组的内容
matcher.group(2)表示匹配到的第2个分组的内容
- 非捕获分组
包含:?:
,?=
,?!
,?<=
,?<!
,
如:
exp1(?=exp2):查找 exp2 前面的 exp1。
exp1(?:exp2|exp3):查找 exp1exp2|exp1exp3。
反向引用
- 引用分组匹配结果
在正则表达式里面通过\分组号
来引用
例如:
(\d)(\d)\2\1 将匹配4位数字,第三位和第二位相同,第四位和第一位相同,匹配结果类似:1221 2112
- 替换操作
通过$分组号
来引用
字符串去重
String content = "你好好啊啊啊,我我我我是谁谁";
Pattern compile = Pattern.compile("(.)\\1+");
Matcher matcher = compile.matcher(content);
String result = matcher.replaceAll("$1");
System.out.println(result);