位置:首页 > Java技术 > Java基础教程 > Java正则表达式

Java正则表达式

Java提供了java.util.regex包的模式正则表达式匹配。 Java正则表达式是非常相似的Perl编程语言,很容易学习。

正则表达式是一个字符的特殊序列,可以帮助您匹配或查找其他字符串或字符串集,使用的模式举行了专门的语法。它们可以被用于搜索,编辑或处理文本和数据。

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

  • Pattern 类: Pattern对象是一个正则表达式的编译表示。 Pattern类不提供公共构造函数。要创建一个模式,必须首先调用其公共静态编译的方法之一,这将返回一个Pattern对象。这些方法接受一个正则表达式作为第一个参数。

  • Matcher 类: Matcher对象是解释模式,并执行对输入字符串匹配操作的引擎。像Pattern类,匹配器定义没有公共的构造函数。通过调用一个Pattern对象的匹配方法获得一个Matcher对象。

  • PatternSyntaxException: PatternSyntaxException对象是一个未经检查的异常,表明正则表达式模式中的语法错误.

捕获组:

捕获组是一种方法处理多种字符作为一个单一的单元。他们被放置到一组括号内分组字符创建。例如,正则表达式(dog)创建一个包含字母"d", "o" 和  "g" 的一个组。 .

捕获组是由左至右计数的左括号的编号。例如,表达式((A)(B(C)))有四个这样的组:

  • ((A)(B(C)))

  • (A)

  • (B(C))

  • (C)

要找出有多少组出现在表达式,调用一个匹配对象的groupCount方法。groupCount方法返回一个int表示目前在匹配器模式的捕获组数.

还有一个特别的组,组0,它始终代表整个表达式。此组中不包括所报告groupCount的总和。

例子:

下面的例子说明如何找到从给定的字母数字字符串,一个数字串:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }
   }
}

这将产生以下结果:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

正则表达式语法

这里的表中列出了所有的正则表达式元字符,并可在Java中的语法:

子表达式 匹配
^ 匹配一行的开始.
$ 匹配一行的结尾.
. 匹配除换行符外的任何单个字符。使用m选项允许它匹配换行符.
[...] 匹配括号中的任何单个字符.
[^...] 匹配非括号中的任何单个字符
A 整个字符串的开头
z 整个字符串的结尾