Java中的java.util.regex包用于正则表达式的模式匹配。
一个正则表达式就是一个特定的字符序列,能够用来匹配、查找或者设置字符串,正则表达式使用特定的语法表示一个模式,也被用来进行搜索,编辑或处理文本和数据。
java.util.regex包主要包括以下三个类:
Pattern类:pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
Matcher类:Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
PatternSyntaxException:PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
捕获组:
捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。
例如,正则表达式(dog) 创建了单一分组,组里包含"d","o",和"g"。
捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:
((A)(B(C)))
(A)
(B(C))
(C)
可以通过调用matcher对象的groupCount方法来查看表达式有多少个分组。groupCount方法返回一个int值,表示matcher对象当前有多个捕获组。
还有一个特殊的组(组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 places 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 places for QT3000! OK?
Found value: This order was places for QT300
Found value: 0
正则表达式语法:
下面是Java中所有正则表达式元字符的列表:
子表达式 匹配
^ 匹配开始行
$ 匹配结束行
. 匹配除换行外所有单个字符。使用m选项,允许它来匹配换行符。
[...] 匹配括号内任何单个字符。
[^...] 匹配不在括号内任何单个字符。
A 整个字符串的开头
z 整个字符串的结束
32 结束整个字符串但允许最后一行终结符。
re* 匹配0或多个前面的表达式。
re+ 匹配1或多个前面的表达式。
re? 匹配0或1个前面的表达式。
re{ n} 匹配n个前面的表达式。
re{ n,} 匹配n个或更多个前面的表达式。
re{ n, m} 匹配n到m个前面的表达式。
a| b 匹配a或者b。
(re) 分组正则表达式并记住匹配内容。
(?: re) 分组正则表达式无需记住匹配内容。
(?> re) 没有回溯的独立匹配模式。
w 匹配单词字符。
W 匹配非单词字符。
s 匹配空白。等价于[ f].
S 匹配一个非空白。
d 匹配数字,等价于[0-9]。
D 匹配非数字。
A 匹配字符串的开始。
32 匹配字符串的结尾。如果存在一个换行符,只匹配换行符之前的。
z 匹配字符串的结束。
G 匹配最后的匹配点。
返回捕获组编号“n”。
匹配括号外的单词边界。匹配括号内的退格(0x08)。
B 匹配非单词边界。
, , etc. 匹配换行,回车符,制表符等。
Q 跳过(引用)所有字符直到E。
E 结束Q开始的引用。 |
|