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 | 整个字符串的结尾 |