Java 正则表达式
什么是正则表达式?
正则表达式,又称规则表达式,是形成搜索模式的字符序列。通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式可以是单个字符,也可以是更复杂的模式。
正则表达式可用于执行所有类型的 文本搜索 和 文本替换 操作。
Java 没有内置的正则表达式类,但我们可以导入 java.util.regex
包来使用正则表达式。该包还包括以下类别:
- Pattern 类 - 定义模式(用于搜索)
- Matcher 类 - 用于搜索模式
- PatternSyntaxException 类 - 指示正则表达式模式中的语法错误
实例
找出句子中是否出现 “cankaoshouce” 一词:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("cankaoshouce", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit cankaoshouce!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
实例解释
在本例中,在一个句子中搜索单词 “cankaoshouce”。
首先,使用 Pattern.compile()
方法。第一个参数指示正在搜索哪个模式,第二个参数有一个标志指示搜索应该不区分大小写。第二个参数是可选的。
matcher()
方法用于搜索字符串中的模式。它返回一个 Matcherobject,其中包含有关已执行搜索的信息。
如果在字符串中匹配到规则,则 find()
方法返回 true;如果匹配的模式,则返回 false。
Flags 参数
compile()
方法中的 Flags 标识会更改搜索的执行方式。以下是其中的几个:
Pattern.CASE_INSENSITIVE
- 执行搜索时将忽略字母大小写。Pattern.LITERAL
- 模式中的特殊字符没有任何特殊含义,在执行搜索时将被视为普通字符。Pattern.UNICODE_CASE
- 将其与不区分大小写的标识一起使用,以忽略英语字母表之外的字母的大小写。
正则表达式模式
The first parameter of the Pattern.compile()
method is the pattern. It describes whatis being searched for.
Pattern.compile()
方法的第一个参数就是 pattern 模式。它描述了正在搜索的内容
括号用于查找一系列字符:
表达式 | 描述 |
---|---|
[abc] | 从括号之间的选项中找出一个字符 |
[^abc] | 查找一个不在括号之间的字符 |
[0-9] | 从 0 到 9 之间找到一个字符 |
元字符
元字符是具有特殊意义的字符:
元字符 | 描述 |
---|---|
| | 找到由 | 分隔的任何一种模式的匹配项,如:cat|dog|fish |
. | 匹配除换行符(\n、\r)之外的任何单个字符 |
^ | 匹配字符串的开头,如中所示: ^Hello |
$ | 匹配字符串的结尾,如中所示: World$ |
\d | 匹配数字 |
\s | 匹配任意的空白符 |
\b | 匹配单词的开头比如: \bWORD, 或者结尾比如: WORD\b |
\uxxxx | 匹配由十六进制数字 xxxx 指定的 Unicode 字符 |
限定符
限定符定义次数:
量词 | 描述 |
---|---|
n+ | 匹配至少包含一个 n 的任何字符串 |
n* | 匹配包含 0 次或多次出现的 n 的任何字符串 |
n? | 匹配任何包含 0 次或 1 次 n 的字符串 |
n{x} | 匹配任何包含 x 次 n 的字符串 |
n{x,y} | 匹配包含 至少 x 次且最多 y 次 n 的任何字符串 |
n{x,} | 匹配任何包含至少 x 次 n 的字符串 |
注意:如果表达式需要搜索其中一个特殊字符,可以使用反斜杠(
\
)对其进行转义。在Java 中,字符串中的反斜杠需要自己转义,所以需要两个反斜杠来转义特殊字符。例如,要搜索一个或多个问号,可以使用以下表达式:"\?"