Java Pattern类详解
Pattern在包中,是正则表达式的编译表示形式,此类的实例是不可变的,可供多个并发线程安全使用。
定义
public final class Pattern extends Object implements Serializable
构造器
private Pattern(String p, int f) { pattern = p; flags = f;
// Reset group index count
capturingGroupCount = 1;
localCount = 0;
if (() > 0) {
compile();
} else {
root = new Start(lastAccept);
matchRoot = lastAccept;
}
}
构造器是私有的,不能通过new创建Pattern对象。
获取Pattern类的实例
public static Pattern compile(String regex) { return new Pattern(regex, 0); } public static Pattern compile(String regex, int flags) { return new Pattern(regex, flags); }
Pattern调用静态方法compile返回Pattern实例。
组和捕获
捕获组可以通过从左到右计算其开括号来编号。
在表达式 ((A)(B(C))) 中,存在四个组:
1 | ABC |
2 | A |
3 | BC |
4 | C |
组零始终代表整个表达式。
方法
1. static Pattern compile(String regex)
将给定的正则表达式编译并赋予给Pattern类
2. static Pattern compile(String regex, int flags)
同上,但增加flag参数的指定,可选的flag参数包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON EQ
3. int flags()
返回当前Pattern的匹配flag参数.
Pattern p = ("a+", Pattern.CASE_INSENSITIVE); (());// 2
4. String pattern()
返回该Patter对象所编译的正则表达式。
Pattern p = ("\\d+"); (());// 输出\d+ (());// 输出\d+
(CharSequence input)
此方法用于分隔字符串,并返回一个String[]。
Pattern p=("\\d+"); String[] str=("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@");
运行结果
str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@"
6. String[] split(CharSequence input, int limit)
input:要拆分的字符序列;limit:结果阈值,控制应用模式的次数,从而影响结果数组的长度。
(String regex,CharSequence input)
此方法是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串.
("\\d+","2223");//返回true ("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 ("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到
(CharSequence input)
返回一个Matcher对象,Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作。
Pattern p=("\\d+"); Matcher m=("22bb23"); ();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的
例子
import . * ; public class Replacement { public static void main(String[] args) throws Exception { // 生成一个Pattern,同时编译一个正则表达式 Pattern p = ("[/]+"); //用Pattern的split()方法把字符串按"/"分割 String[] result = ("Kevin has seen《LEON》seveal times,because it is a good film." + "/ 凯文已经看过《这个杀手不太冷》几次了,因为它是一部" + "好电影。/名词:凯文。"); for (int i = 0; i < ; i++) (result[i]); } }
输出结果为:
Kevin has seen《LEON》seveal times,because it is a good film.
凯文已经看过《这个杀手不太冷》几次了,因为它是一部好电影。
名词:凯文。
总结
Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过(String regex)简单工厂方法创建一个正则表达式。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。