Java PCRE 正则表达式简介及示例

1. 什么是正则表达式

正则表达式是一种用来描述、匹配和处理字符串的强大工具。它使用一种特殊的语法来定义匹配模式,并且可以在文本中进行查找、替换和提取操作。正则表达式广泛应用于文本处理、数据提取、数据验证等领域。

2. Java 中的 PCRE 正则表达式

PCRE (Perl Compatible Regular Expressions) 是一种兼容 Perl 语言的正则表达式语法,它在 Java 中得到了支持。Java 提供了 java.util.regex 包来处理正则表达式,其中的类和方法可以直接支持 PCRE 语法。

3. 正则表达式的基本语法

3.1 字符匹配

.:匹配任意单个字符。

示例:

String regex = "a.b";
String text1 = "aab";
String text2 = "acb";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 true

[]:匹配括号中的任意一个字符。

示例:

String regex = "[aeiou]";
String text1 = "apple";
String text2 = "banana";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 false

\:转义字符,用于匹配特殊字符。

示例:

String regex = "\\[\\]";
String text1 = "[]";
String text2 = "[abc]";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 false

3.2 限定符

*:匹配前一个字符的零个或多个重复。

示例:

String regex = "a*b";
String text1 = "b";
String text2 = "aab";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 true

+:匹配前一个字符的一个或多个重复。

示例:

String regex = "a+b";
String text1 = "b";
String text2 = "aab";
System.out.println(text1.matches(regex));  // 输出 false
System.out.println(text2.matches(regex));  // 输出 true

?:匹配前一个字符的零个或一个重复。

示例:

String regex = "a?b";
String text1 = "b";
String text2 = "ab";
String text3 = "aab";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 true
System.out.println(text3.matches(regex));  // 输出 false

{n}:匹配前一个字符的恰好 n 次重复。

示例:

String regex = "a{2}b";
String text1 = "aab";
String text2 = "ab";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 false

{n,}:匹配前一个字符的至少 n 次重复。

示例:

String regex = "a{2,}b";
String text1 = "aab";
String text2 = "aaab";
String text3 = "ab";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 true
System.out.println(text3.matches(regex));  // 输出 false

{n,m}:匹配前一个字符的 n 到 m 次重复。

示例:

String regex = "a{2,4}b";
String text1 = "aab";
String text2 = "aaab";
String text3 = "aaaab";
String text4 = "aaaaab";
String text5 = "ab";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches(regex));  // 输出 true
System.out.println(text3.matches(regex));  // 输出 true
System.out.println(text4.matches(regex));  // 输出 true
System.out.println(text5.matches(regex));  // 输出 false

3.3 边界匹配

^:匹配行的开始位置。

示例:

String regex = "^abc";
String text1 = "abcxyz";
String text2 = "xyzabc";
System.out.println(text1.matches(regex));  // 输出 true
System.out.println(text2.matches