使用正则表达式需要引入 java.util.regex 包,我们就从这里入手讲解:
001.png

java.util.regex 包主要包括以下三个类:

Pattern 类:

Pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
002.png

PatternSyntaxException:

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

1. 正则表达式的使用:

  1. /* import java.util.regex.*; */
  2. public void RegexExample() {
  3. String input = "I am Jimmy from mp.csdn.net";
  4. String regex = ".*csdn.*";
  5. // 方式1:String 的 matches 方法
  6. boolean flag1 = input.matches(regex);
  7. // 方式2:Pattern 对象的 matches 方法
  8. boolean flag2 = Pattern.matches(regex, input);
  9. // 方式3: Matcher 对象的 matches 方法
  10. Pattern p = Pattern.compile(regex);
  11. Matcher m = p.matcher(input);
  12. boolean flag3 = m.matches();
  13. System.out.println("字符串中是否包含了'csdn'子字符串? " + flag1 );
  14. System.out.println("字符串中是否包含了'csdn'子字符串? " + flag2 );
  15. System.out.println("字符串中是否包含了'csdn'子字符串? " + flag3 );
  16. }

输出结果:

  • 字符串中是否包含了’csdn’子字符串? true
  • 字符串中是否包含了’csdn’子字符串? true
  • 字符串中是否包含了’csdn’子字符串? true

从上面的代码中,你会看到一个现象:

  • 3种方式的底层实现其实是一样的,只是封装的成度不一样,实际也确实如此;
  • 明白方式3,更有助于理解正则的执行过程;

2. 正则表达式语法

在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。

在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

常用表达式汇总