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