Java 正则表达式
什么是正则表达式?
正则表达式是构成搜索模式的字符序列。当您在文本中搜索数据时,可以使用此搜索模式来描述您要搜索的内容。
正则表达式可以是一个字符,也可以是一个更复杂的模式。
正则表达式可用于执行所有类型的 **文本搜索** 和 **文本替换** 操作。
Java 没有内置的正则表达式类,但我们可以导入 java.util.regex
包来使用正则表达式。该包包含以下类
Pattern
类 - 定义模式(用于搜索)Matcher
类 - 用于搜索模式PatternSyntaxException
类 - 指示正则表达式模式中的语法错误
示例
找出句子中是否存在“w3schools”这个词的出现
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
示例说明
在这个例子中,我们正在一个句子中搜索“w3schools”这个词。
首先,使用 Pattern.compile()
方法创建模式。第一个参数指示要搜索的模式,第二个参数有一个标志,指示搜索应该不区分大小写。第二个参数是可选的。
matcher()
方法用于在字符串中搜索模式。它返回一个 Matcher 对象,其中包含有关执行的搜索的信息。
find()
方法如果在字符串中找到模式则返回 true,如果未找到则返回 false。
标志
compile()
方法中的标志会改变搜索的执行方式。以下列举了一些标志:
Pattern.CASE_INSENSITIVE
- 在执行搜索时将忽略字母的大小写。Pattern.LITERAL
- 模式中的特殊字符将没有任何特殊含义,在执行搜索时将被视为普通字符。Pattern.UNICODE_CASE
- 与CASE_INSENSITIVE
标志一起使用,以忽略英文字母表之外的字母的大小写
正则表达式模式
Pattern.compile()
方法的第一个参数是模式。它描述了要搜索的内容。
方括号用于查找字符范围
表达式 | 描述 |
---|---|
[abc] | 查找括号之间选项中的一个字符 |
[^abc] | 查找括号之间之外的一个字符 |
[0-9] | 0 到 9 范围内的任何一个字符 |
元字符
元字符是具有特殊含义的字符
元字符 | 描述 |
---|---|
| | | 查找与任何一个用 | 分隔的模式匹配,例如:cat|dog|fish |
. | . 查找任何一个字符的单个实例 |
^ | ^ 查找与字符串开头的匹配,例如:^Hello |
$ | $ 查找与字符串结尾的匹配,例如:World$ |
\d | 查找一个数字 |
\s | 查找一个空白字符 |
\b | 查找单词开头的匹配,例如:\bWORD,或单词结尾的匹配,例如:WORD\b |
\uxxxx | 查找由十六进制数 xxxx 指定的 Unicode 字符 |
量词
量词定义数量
量词 | 描述 |
---|---|
n+ | 匹配包含至少一个 n 的任何字符串 |
n* | 匹配包含零个或多个 n 的任何字符串 |
n? | 匹配包含零个或一个 n 的任何字符串 |
n{x} | 匹配包含 X 个 n 序列的任何字符串 |
n{x,y} | 匹配包含 X 到 Y 个 n 序列的任何字符串 |
n{x,} | 匹配包含至少 X 个 n 序列的任何字符串 |