Java 正则表达式

什么是正则表达式?

正则表达式,又称规则表达式,是形成搜索模式的字符序列。通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式可以是单个字符,也可以是更复杂的模式。

正则表达式可用于执行所有类型的 文本搜索文本替换 操作。

Java 没有内置的正则表达式类,但我们可以导入 java.util.regex 包来使用正则表达式。该包还包括以下类别:

  • Pattern 类 - 定义模式(用于搜索)
  • Matcher 类 - 用于搜索模式
  • PatternSyntaxException 类 - 指示正则表达式模式中的语法错误
实例

找出句子中是否出现 “cankaoshouce” 一词:

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. public class Main {
  4. public static void main(String[] args) {
  5. Pattern pattern = Pattern.compile("cankaoshouce", Pattern.CASE_INSENSITIVE);
  6. Matcher matcher = pattern.matcher("Visit cankaoshouce!");
  7. boolean matchFound = matcher.find();
  8. if(matchFound) {
  9. System.out.println("Match found");
  10. } else {
  11. System.out.println("Match not found");
  12. }
  13. }
  14. }
实例解释

在本例中,在一个句子中搜索单词 “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}匹配任何包含 xn 的字符串
n{x,y}匹配包含 至少 x 次且最多 yn 的任何字符串
n{x,}匹配任何包含至少 xn 的字符串
注意:如果表达式需要搜索其中一个特殊字符,可以使用反斜杠(\)对其进行转义。在Java 中,字符串中的反斜杠需要自己转义,所以需要两个反斜杠来转义特殊字符。例如,要搜索一个或多个问号,可以使用以下表达式:"\?"