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 的序列的任何字符串 |