当前位置:首页 > 编程知识 > 正文

Java正则表达式语法大全

Java中的正则表达式是用来处理字符串的一种强大工具。正则表达式可以用来在文本中搜索、替换、匹配、验证等操作。在Java中,使用java.util.regex包中的类来处理正则表达式。

一、正则表达式概述

正则表达式是一系列字符和字符组合的模式,用来匹配、查找和替换文本。这些模式可以用来检查输入字符串是否与某种模式匹配、搜索输入字符串中的匹配模式、以及在输入字符串中搜索和替换模式。

在Java中,正则表达式是由两个主要类组成,第一个是Pattern,它表示正则表达式的编译后的模式。第二个是Matcher,它是用来匹配一个输入字符串和这个模式的。

在编写正则表达式时,一些基本字符具有特殊含义,这些字符在正则表达式中有特殊的用法。例如,正则表达式中的元字符 \d 表示任何一个数字。因为某些字符在正则表达式中具有特殊含义,它们需要通过反斜杠进行转义,例如 \d 表示匹配一个数字(0-9)。

二、正则表达式语法

Java中的正则表达式语法中有许多不同元字符、字符类和修饰符,这些元素可以组合在一起来生成非常复杂的表达式,下面是一些常见的元字符、字符类和修饰符:

1.元字符

元字符是正则表达式中的特殊字符,下面是一些常见的元字符:

  • \
    :用来对下一个字符进行转义,例如 \d 表示匹配一个数字。
  • .
    :表示任何字符。
  • ^
    :表示字符串的开始。
  • $
    :表示字符串的结束。
  • *
    :表示重复 0 或多次。
  • +
    :表示重复 1 或多次。
  • ?
    :表示重复 0 或 1 次。
  • {n}
    :表示重复 n 次。
  • {n,}
    :表示重复 n 次或更多次。
  • {n,m}
    :表示重复 n 到 m 次。
  • |
    :表示或。
  • []
    :表示字符集合。
  • ()
    :表示捕获组。

2.字符类

字符类是用来匹配一个特定的字符集合,下面是一些常见的字符类:

  • \d
    :表示任何一个数字(0-9)。
  • \w
    :表示任何一个单词字符(字母、数字或下划线)。
  • \s
    :表示任何一个空白字符(空格、制表符、换行符等)。
  • \D
    :表示任何一个非数字字符。
  • \W
    :表示任何一个非单词字符。
  • \S
    :表示任何一个非空白字符。
  • [abc]
    :表示匹配字符 a、b 或 c。
  • [^abc]
    :表示匹配除了字符 a、b 或 c 以外的任何字符。
  • [a-z]
    :表示匹配小写字母 a 到 z 中的任何一个字符。
  • [A-Z]
    :表示匹配大写字母 A 到 Z 中的任何一个字符。
  • [0-9]
    :表示匹配数字 0 到 9 中的任何一个字符。

3.修饰符

修饰符用来改变正则表达式默认的匹配行为,下面是一些常见的修饰符:

  • i
    :表示不区分大小写。
  • m
    :表示多行模式。
  • s
    :表示dotall模式,允许 . 匹配任何字符,包括换行符。
  • x
    :表示忽略空白模式,忽略空格字符并启用注释。

三、代码示例

1.单个匹配

  
    String pattern = "foo";
    String input = "foobar";
    boolean isMatch = Pattern.matches(pattern, input);
    System.out.println(isMatch); // true
  

2.多个匹配

  
    String pattern = "\\d+";
    String input = "123 456 789";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);
    while (m.find()) {
      System.out.println(m.group());
    }
    // Output: 123 456 789
  

3.替换匹配

  
    String pattern = "\\bcat\\b";
    String input = "The cat is black.";
    String replacement = "dog";
    String output = input.replaceAll(pattern, replacement);
    System.out.println(output); // The dog is black.
  

4.捕获组

  
    String pattern = "(\\d{3})-(\\d{4})";
    String input = "123-4567";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);
    if (m.find()) {
      String group1 = m.group(1); // 123
      String group2 = m.group(2); // 4567
      System.out.println(group1);
      System.out.println(group2);
    }
  

5.贪婪模式

  
    String pattern = ".*foo";
    String input = "xfooxxxxxxfoo";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);
    if (m.find()) {
      System.out.println(m.group()); // xfooxxxxxxfoo
    }
  

6.非贪婪模式

  
    String pattern = ".*?foo";
    String input = "xfooxxxxxxfoo";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);
    if (m.find()) {
      System.out.println(m.group()); // xfoo
    }
  

7.字符类

  
    String pattern = "[aeiou]";
    String input = "The quick brown fox jumps over the lazy dog.";
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);
    StringBuffer buffer = new StringBuffer();
    while (m.find()) {
      m.appendReplacement(buffer, m.group().toUpperCase());
    }
    m.appendTail(buffer);
    System.out.println(buffer.toString()); // ThE qUIck brOwn fOx jUmps OvEr ThE lAzy dOg.
  

8.忽略空白

  
    String pattern = "(?i)hello\\s+world";
    String input = "Hello    World";
    Pattern p = Pattern.compile(pattern, Pattern.COMMENTS);
    Matcher m = p.matcher(input);
    if (m.find()) {
      System.out.println("Match found");
    }
  

四、总结

Java正则表达式提供了一种强大的工具来处理文本。了解正则表达式的语法和常见的元字符、字符类和修饰符,可以帮助我们更好地理解和编写正则表达式。Pattern和Matcher类是处理正则表达式的核心类,在实际编程中需要灵活使用。通过本篇文章的介绍,相信大家已经掌握了Java正则表达式的基本用法和常见应用,可以用于实际项目中的开发。