1.正则表达式
字符匹配 matches
"Dog".matches("(?i)dog");
"我爱中国\\中国爱我\\".split("\\\\");
获得匹配器 Macher
字符
"T".matches("[\tT]"
"a".matches("[^\tT]"
"a".matches("[a-c]"
"a".matches("[a-c[e-g]]
"c".matches("[a-c&&[c-f]]")
预定义字符
"\r".matches(".")
"\n".matches(".")
"罗".matches("\\w");
"_".matches("\\w");
"a".matches("\\w");
"1".matches("\\w");
"\t".matches("\\s");
"1".matches("\\d");
数量表示
表达式 | 描述 |
---|
? | 匹配前面的表达式0个或1个。即表示可选项。 |
+ | 匹配前面的表达式至少1个。 |
* | 匹配前面的表达式0个或多个。 |
` | ` |
{m} | 匹配前面的表达式m个。 |
{m,} | 匹配前面的表达式最少m个。 |
{m,n} | 匹配前面的表达式最少m个,最多n个。 |
System.out.println("".matches("\\d+"));
System.out.println("".matches("\\d+|\\d?"));
System.out.println("12".matches("\\d{1}|\\d{1,2}"));
"xfooxxxxxxfoo1".replaceAll(".*foo", "ORZ");
"xfooxxxxxxfoo1".replaceAll(".*?foo", "ORZ");
"xfooxxxxxxfoo1".replaceAll(".*+foo", "ORZ");
边界
表达式 | 描述 |
---|
^ | 匹配字符串或行开头。 |
$ | 匹配字符串或行结尾。 |
\b | 匹配单词边界。比如Sheep\b 可以匹配CodeSheep 末尾的Sheep ,不能匹配CodeSheepCode 中的Sheep |
\B | 匹配非单词边界。比如Code\B 可以匹配HelloCodeSheep 中的Code ,不能匹配HelloCode 中的Code 。 |
"justin dog monica doggie Irendog".split("\\bdog\\b");
"justin 罗 monica 罗 dog 罗 gie".split("\\b罗\\b");
"justin _ monica _ dog _ gie".split("\\b_\\b");
"justin 1 monica 1 dog 1 gie".split("\\b1\\b");
"justin \t monica \t dog \t gie".split("\\B\\t\\B");
分组和引用
表达式 | 描述 |
---|
(expression) | 分组。匹配括号里的整个表达式。 |
(?:expression) | 非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。 |
\num | 对前面所匹配分组的引用。比如(\d)\1 可以匹配两个相同的数字,(Code)(Sheep)\1\2 则可以匹配CodeSheepCodeSheep 。 |
"1111".matches("^(\\d*)|(\\D*)$");
"wwww".matches("^((\\d\\d)|(\\D\\D))\\1$");
"1111".matches("^(?:(\\d\\d)|(\\D\\D))\\1$");
预查断言
表达式 | 描述 |
---|
(?=) | 正向预查。比如Code(?=Sheep) 能匹配CodeSheep 中的Code ,但不能匹配CodePig 中的Code 。 |
(?!) | 正向否定预查。比如Code(?!Sheep) 不能匹配CodeSheep 中的Code ,但能匹配CodePig 中的Code 。 |
(?<=) | 反向预查。比如(?<=Code)Sheep 能匹配CodeSheep 中的Sheep ,但不能匹配ReadSheep 中的Sheep 。 |
(?<!) | 反向否定预查。比如(?<!Code)Sheep 不能匹配CodeSheep 中的Sheep ,但能匹配ReadSheep 中的Sheep 。 |
"HellosplitWorld!!".split("split(?=World)");
"Hellosplitworld!!".split("split(?!World)");
"hellosplitworld!!!".split("(?<=hello)split");
"Hellosplitworld!!!".split("(?<!hello)split");
"dogabcabc".matches("((?i)dog([a][b][c]))\\2");
忽略大小写
"Dog".matches("(?i)dog");
"我爱中国\\中国爱我\\".split("\\\\");
2.Pattern
代表 regex 对象
Pattern compile = Pattern.compile(".*foo");
Matcher matcher = compile.matcher("xfoox");
matcher.lookingAt();
String[] regexs = new String[]{".*foo", ".*+foo", ".*?foo"};
for (String regex : regexs) {
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher("xfooxxxxxxxxxxxxxxfoo");
while (matcher.find()) {
matcher.group();
}
}