我爱学Java之Pattern和Matcher⽤法
Java正则表达式通过包下的Pattern和Matcher类实现
Pattern类⽤于创建⼀个正则表达式,也可以说是创建⼀个匹配模式,可以通过两个静态⽅法创建:compile(String regex)和
compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如:Pattern.CASE_INSENSITIVE 忽略⼤⼩写)
实例:
Pattern pattern = Patternpile("Java");
System.out.println(pattern.pattern());//返回此模式的正则表达式即Java
Pattern类还有两个根据匹配模式拆分输⼊序列的⽅法:split(CharSequence input) 和split(CharSequence input, int limit),其中limit 为返回元素的个数。
实例:
Pattern pattern = Patternpile("Java");
String test="123Java456Java789Java";
String[] result = pattern.split(test);
for(String s : result)
System.out.println(s);
结果:
在细说⼀下split(CharSequence input, int limit),当limit值⼤于所能返回的字符串的最多个数或者为负数,返回的字符串个数将不受限制,但结尾可能包含空串,⽽当limit=0时与split(CharSequence input)等价,但结尾的空串会被丢弃。
Pattern pattern = Patternpile("Java");
String test = "123Java456Java789Java";
String[] result = pattern.split(test,2);
for(String s : result)
System.out.println(s);
result = pattern.split(test,10);
System.out.println(result.length);
result = pattern.split(test,-2);
System.out.println(result.length);
result = pattern.split(test,0);
System.out.println(result.length);
运⾏结果:
Pattern类也⾃带⼀个静态匹配⽅法matches(String regex, CharSequence input),但只能进⾏全字符串匹配并且只能返回是否匹配上的boolean值
实例:
String test1 = "Java";
String test2 = "Java123456";
System.out.println(Pattern.matches("Java",test1));//返回true
System.out.println(Pattern.matches("Java",test2));//返回false
最后就要过渡到Matcher类了,Pattern类中的matcher(CharSequence input)会返回⼀个Matcher对象。
Matcher类提供了对正则表达式的分组⽀持,以及对正则表达式的多次匹配⽀持,要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使⽤。
实例:
Pattern pattern = Patternpile("Java");
String test = "123Java456Java789Java";
Matcher matcher = pattern.matcher();
Matcher类提供了三个返回boolean值得匹配⽅法:matches(),lookingAt(),find(),find(int start),其中matches()⽤于全字符串匹配,lookingAt从字符串最开头开始匹配满⾜的⼦串,find可以对任意位置字符串匹配,其中start为起始查索引值。
实例
Pattern pattern = Patternpile("Java");
String test1 = "Java";
String test2 = "Java1234";
String test3 = "1234Java"
Matcher matcher = pattern.matcher(test1);
System.out.println(matcher.matches());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.matches());//返回false
matcher = pattern.matcher(test2);
System.out.println(matcher.lookingAt())://返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.lookingAt());//返回false
matcher = pattern.matcher(test1);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(2));//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(5));//返回false
这⾥介绍下组的概念:组是⽤括号划分的正则表达式,可以根据组的编号来引⽤这个组。组号为0表⽰整个表达式,组号为1表⽰被第⼀对括号括起的组,依次类推,例如A(B(C))D,组0是ABCD,组1是BC,组2是C。
Matcher类提供了start(),end(),group()分别⽤于返回字符串的起始索引,结束索引,以及匹配到到的字符串。
实例:
Pattern pattern = Patternpile("Java");
String test = "123Java456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.start());//返回3
System.out.d());//返回7
System.out.up());//返回Java
Matcher类提供了start(int gropu),end(int group),group(int i),groupCount()⽤于分组操作
实例:
Pattern pattern = Patternpile("(Java)(Python)");
String test = "123JavaPython456";
时间正则表达式javaMatcher matcher = pattern.matcher(test);
matcher.find();
System.out.upCount());//返回2
System.out.up(1));//返回第⼀组匹配到的字符串"Java",注意起始索引是1
System.out.println(matcher.start(1));//返回3,第⼀组起始索引
System.out.d(1));//返回7 第⼀组结束索引
System.out.up(2));//返回第⼆组匹配到的字符串"Python"
System.out.println(matcher.start(2));//返回7,第⼆组起始索引
System.out.d(2));//返回13 第⼆组结束索引
Matcher类还提供region(int start, int end)(不包括end)⽅法⽤于设定查范围,并提供regionStrat()和regionEnd()⽤于返回起始和结束查的索引
Pattern pattern = Patternpile("Java");
String test = "123JavaJava";
Matcher matcher = pattern.matcher(test);
System.out.ionStart());//返回7
System.out.ionEnd());//返回11
matcher.find();
System.out.up());//返回Java
Matcher类提供了两种⽤于重置当前匹配器的⽅法:reset()和reset(CharSequence input)
Pattern pattern = Patternpile("Java");
String test = "Java";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.up());//返回Java
matcher.find();
System.out.up());//返回Java
System.out.println(matcher.find());//返回false
最后说⼀下Matcher类的匹配⽅法:replaceAll(String replacement) 和 replaceFirst(String replacement),其中replaceAll是替换全部匹配到的字符串,⽽replaceFirst仅仅是替换第⼀个匹配到的字符串。
Pattern pattern = Patternpile("Java");
String test = "JavaJava";
Matcher matcher = pattern.matcher(test);
System.out.placeAll("Python"));//返回PythonPython
System.out.placeFirst("python"));//返回PythonJava
还有两个⽅法appendReplacement(StringBuffer sb, String replacement) 和 appendTail(StringBuffer sb)也很重
要,appendReplacement允许直接将匹配的字符串保存在另⼀个StringBuffer中并且是渐进式匹配,并不是只匹配依次或匹配全部,⽽appendTail则是将未匹配到的余下的字符串添加到StringBuffer中。
Pattern pattern = Patternpile("Java");
Matcher matcher = pattern.matcher("Java1234");
System.out.println(matcher.find());//返回true
StringBuffer sb = new StringBuffer();
matcher.appendReplacement(sb, "Python");
System.out.println(sb);//输出Python
matcher.appendTail(sb);
System.out.println(sb);//输出Python1234

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。