📜  讨论-Java正则表达式(1)

📅  最后修改于: 2023-12-03 15:28:05.506000             🧑  作者: Mango

讨论-Java正则表达式

正则表达式(Regular Expression)是一种通用的字符串匹配技术,通过对一些字符的规则匹配,可以实现对文本的搜索、筛选、替换等操作。在 Java 中,正则表达式常常用于字符串的校验、搜索、过滤等场景。

正则表达式的基本语法

在 Java 中,使用 java.util.regex 包来进行正则表达式的编译和匹配。正则表达式的语法很灵活,因此有很多变化,但是基本语法是可以总结出来的。

字符类

字符类是正则表达式中最基本的语法,表示一组字符中的任意一个。以方括号 [ ] 包含一些字符来表示一个字符类,如 [abc] 表示由 a、b、c 三个字符中的任意一个字符。

// 匹配 "a"、"b"、"c" 中的任意一个字符
String regex = "[abc]";
String str = "apple";
System.out.println(str.matches(regex)); // true

还可以使用横线 - 来表示一个字符范围,如 [a-z] 表示小写字母 a 到 z 中的任意一个字符。

// 匹配小写字母 a 到 z 中的任意一个字符
String regex = "[a-z]";
String str = "apple";
System.out.println(str.matches(regex)); // true
量词

量词用于表示一个字符、字符类或子表达式的出现次数。常用的量词有:

  • * 表示前面的字符、字符类或子表达式可以重复 0 或多次。
  • + 表示前面的字符、字符类或子表达式可以重复 1 或多次。
  • ? 表示前面的字符、字符类或子表达式可以存在 0 或 1 次。
  • {n} 表示前面的字符、字符类或子表达式必须出现 n 次。
  • {n,} 表示前面的字符、字符类或子表达式至少出现 n 次。
  • {n,m} 表示前面的字符、字符类或子表达式出现次数在 n 到 m 之间(包括 n 和 m)。

例如,正则表达式 a?b*c+ 匹配任意一个 a,0 或多个 b,1 或多个 c,如 abcc、bbccc、aacc 等。

边界匹配

边界匹配用于表示一个字符串的边界位置。常用的边界匹配符有:

  • ^ 表示字符串的开头。
  • $ 表示字符串的结尾。
  • \b 表示单词边界,即字符与非字符之间的位置。
  • \B 表示非单词边界,即两个字符或两个非字符之间的位置。

例如,正则表达式 ^hello world$ 匹配字符串 "hello world",但不匹配 "hello world!"。

分组和反向引用

分组和反向引用是正则表达式中比较重要的概念,用于匹配一些重复的模式。分组以圆括号 () 包含一些字符来表示,其中可以嵌套分组。反向引用用于引用之前的分组,在相同的分组内部用 \数字 来表示,如 \1 表示引用第一个分组。

例如,正则表达式 ([a-z]+) \1 匹配一个由相同的两个单词组成的字符串,如 "apple apple"、"banana banana" 等。

// 匹配两个连续的相同的单词
String regex = "(\\w+) \\1";
String str = "apple apple";
System.out.println(str.matches(regex)); // true
Java 中的正则表达式 API

在 Java 中,可以使用 java.util.regex.Patternjava.util.regex.Matcher 两个类来进行正则表达式的编译和匹配,具体方式如下:

// 编译正则表达式
Pattern pattern = Pattern.compile(regex);

// 创建 Matcher 对象
Matcher matcher = pattern.matcher(str);

// 判断是否匹配成功
boolean isMatch = matcher.matches();

其中,Pattern 类的静态方法 compile(String regex) 用于编译一个正则表达式字符串成一个 Pattern 对象,Matcher 类的方法 matches() 判断当前字符串是否能够匹配正则表达式。

除了 matches() 方法,Matcher 类还提供了其他一些方法,如 find() 方法用于在字符串中查找下一个匹配的子串,group() 方法用于获取当前匹配的子串等等。

总结

正则表达式是一种强大的字符串处理技巧,能够实现文本的搜索、分割、匹配等功能。在 Java 中,可以使用 java.util.regex 包来编写正则表达式,并通过 PatternMatcher 类进行编译和匹配。针对常见的正则表达式语法,我们可以总结出一些规律,便于快速编写和修改正则表达式。