Java 正则表达式

创建于 2024-12-02 / 27
字体: [默认] [大] [更大]

什么是正则表达式?

正则表达式是形成搜索模式的字符序列。当您在文本中搜索数据时,您可以使用此搜索模式来描述您要搜索的内容。

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

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

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

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

实例

找出句子中是否出现 "w3schools" 这个词:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyClass {
  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");
    }
  }
}
// 输出 Match found

运行实例 »

实例解析

I在此示例中,正在一个句子中搜索单词 "w3schools" 。

首先,使用 Pattern.compile() 方法创建模式。第一个参数指示正在搜索的模式,第二个参数有一个标志来指示搜索应该不区分大小写。第二个参数是可选的。

matcher() 方法用于搜索字符串中的模式。它返回一个 Matcher 对象,其中包含有关已执行搜索的信息。

如果在字符串中找到模式,find() 方法返回 true,如果没有找到,则返回 false。


Flags 标志

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

注释: 如果您的表达式需要搜索其中一个特殊字符,您可以使用反斜杠 () 对其进行转义。在Java中,字符串中的反斜杠需要自己转义,所以需要两个反斜杠来转义特殊字符。例如,要搜索一个或多个问号,您可以使用以下表达式:"\?"




0 人点赞过