📅  最后修改于: 2023-12-03 15:28:05.506000             🧑  作者: Mango
正则表达式(Regular Expression)是一种通用的字符串匹配技术,通过对一些字符的规则匹配,可以实现对文本的搜索、筛选、替换等操作。在 Java 中,正则表达式常常用于字符串的校验、搜索、过滤等场景。
在 Java 中,使用 java.util.regex
包来进行正则表达式的编译和匹配。正则表达式的语法很灵活,因此有很多变化,但是基本语法是可以总结出来的。
字符类是正则表达式中最基本的语法,表示一组字符中的任意一个。以方括号 [ ]
包含一些字符来表示一个字符类,如 [abc]
表示由 a、b、c 三个字符中的任意一个字符。
// 匹配 "a"、"b"、"c" 中的任意一个字符
String regex = "[abc]";
String str = "apple";
System.out.println(str.matches(regex)); // true
还可以使用横线 -
来表示一个字符范围,如 [a-z]
表示小写字母 a 到 z 中的任意一个字符。
// 匹配小写字母 a 到 z 中的任意一个字符
String regex = "[a-z]";
String str = "apple";
System.out.println(str.matches(regex)); // true
量词用于表示一个字符、字符类或子表达式的出现次数。常用的量词有:
*
表示前面的字符、字符类或子表达式可以重复 0 或多次。+
表示前面的字符、字符类或子表达式可以重复 1 或多次。?
表示前面的字符、字符类或子表达式可以存在 0 或 1 次。{n}
表示前面的字符、字符类或子表达式必须出现 n 次。{n,}
表示前面的字符、字符类或子表达式至少出现 n 次。{n,m}
表示前面的字符、字符类或子表达式出现次数在 n 到 m 之间(包括 n 和 m)。例如,正则表达式 a?b*c+
匹配任意一个 a,0 或多个 b,1 或多个 c,如 abcc、bbccc、aacc 等。
边界匹配用于表示一个字符串的边界位置。常用的边界匹配符有:
^
表示字符串的开头。$
表示字符串的结尾。\b
表示单词边界,即字符与非字符之间的位置。\B
表示非单词边界,即两个字符或两个非字符之间的位置。例如,正则表达式 ^hello world$
匹配字符串 "hello world",但不匹配 "hello world!"。
分组和反向引用是正则表达式中比较重要的概念,用于匹配一些重复的模式。分组以圆括号 ()
包含一些字符来表示,其中可以嵌套分组。反向引用用于引用之前的分组,在相同的分组内部用 \数字
来表示,如 \1
表示引用第一个分组。
例如,正则表达式 ([a-z]+) \1
匹配一个由相同的两个单词组成的字符串,如 "apple apple"、"banana banana" 等。
// 匹配两个连续的相同的单词
String regex = "(\\w+) \\1";
String str = "apple apple";
System.out.println(str.matches(regex)); // true
在 Java 中,可以使用 java.util.regex.Pattern
和 java.util.regex.Matcher
两个类来进行正则表达式的编译和匹配,具体方式如下:
// 编译正则表达式
Pattern pattern = Pattern.compile(regex);
// 创建 Matcher 对象
Matcher matcher = pattern.matcher(str);
// 判断是否匹配成功
boolean isMatch = matcher.matches();
其中,Pattern
类的静态方法 compile(String regex)
用于编译一个正则表达式字符串成一个 Pattern
对象,Matcher
类的方法 matches()
判断当前字符串是否能够匹配正则表达式。
除了 matches()
方法,Matcher
类还提供了其他一些方法,如 find()
方法用于在字符串中查找下一个匹配的子串,group()
方法用于获取当前匹配的子串等等。
正则表达式是一种强大的字符串处理技巧,能够实现文本的搜索、分割、匹配等功能。在 Java 中,可以使用 java.util.regex
包来编写正则表达式,并通过 Pattern
和 Matcher
类进行编译和匹配。针对常见的正则表达式语法,我们可以总结出一些规律,便于快速编写和修改正则表达式。