Java 正则表达式
什么是正则表达式?
正则表达式是形成搜索模式的字符序列。在文本中搜索数据时,您可以使用搜索模式来描述您要搜索的内容。
正则表达式可以是单个字符,也可以是更复杂的模式。
正则表达式可用于执行所有类型的文本搜索和文本替换操作。
Java 没有内置的正则表达式类,但我们可以导入 java.util.regex
包来处理正则表达式。该包提供以下类:
Pattern
类 - 定义模式(用于搜索)Matcher
类 - 用于搜索模式PatternSyntaxException
类 - 指示正则表达式模式中的语法错误
实例
找出句子中是否出现 "W3School" 一词:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Pattern pattern = Pattern.compile("W3School", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher("Visit W3School!"); boolean matchFound = matcher.find(); if(matchFound) { System.out.println("找到匹配"); } else { System.out.println("未找到匹配"); } } } // 输出:找到匹配
例子解释
此例在句子中搜索单词 "W3School"。
首先,使用 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 的序列的任意字符串。 |
注意:如果您的表达式需要搜索特殊字符之一,可以使用反斜杠 ( \ ) 将其转义。在 Java 中,字符串中的反斜杠需要自己转义,因此需要两个反斜杠来转义特殊字符。例如,要搜索一个或多个问号,您可以使用以下表达式:"\\?"