学习JAVA正则表达式基本用法
2016-12-08 16:42
274 查看
学习JAVA正则表达式基本用法
1.什么是正则表达式?
通俗的讲,正则表达式是使用一定规则去描述字符串,通常使用正则表达式,我们可以快速的对字符串进行查找,替换等操作。2.基本方法用法
package com.learn.regex.part1; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PatternTest1 { public static void main(String[] args) { // 如何创建一个正则表达式 Pattern pattern = Pattern.compile("(\\d)");// \d代表数字,由于\为转义字符,所以如果需要表示\则要用\\ // pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数 System.out.println(pattern.pattern());// 输出\d Matcher matcher = pattern.matcher("123"); //System.out.println(matcher.matches());// false // 上述表达式需要匹配的是一个数字,则待匹配字符串是"123",显然不符合条件 // 注:当且仅当整个区域序列匹配此匹配器的模式时才返回 true。 from:java doc System.out.println(matcher.find());// true //find操作是:尝试查找与该模式匹配的输入序列的下一个子序列。 //此时我们调用start,end,group可以获得匹配成功的相关信息 /* * 输出结果为0 * java doc:第一个匹配字符的索引 * 原待匹配字符串是"123",调用find后,匹配成功,匹配字符是1,1对应的字符串索引为char[0],0 * */ System.out.println(matcher.start(1)); /* * 输出结果为1 * java doc:组捕获的最后字符之后的偏移量;如果匹配成功但组本身没有任何匹配项,则返回 -1。 * 原待匹配字符串是"123",调用find后,匹配成功,匹配字符是1,1对应的下一个字符串索引为char[1],1 * */ System.out.println(matcher.end()); /* * 输出结果为1 * java doc:以前匹配操作所匹配的字符串形式的子序列(可能为空)。 * 原待匹配字符串是"123",调用find后,匹配成功,匹配字符是1,由于find匹配成功后就立即结束,所以得到的group只有["1"]. * */ System.out.println(matcher.group()); //★★★★此时我们再次调用find,start,end,group,结果还会一样吗?★★★★ System.out.println(matcher.find());// true System.out.println(matcher.start());// 1 System.out.println(matcher.end());// 2 System.out.println(matcher.group());// 2 // 结果和上述明显不一样,那是因为matcher匹配器没有重置,我们已经调用了一次find,查看源码可知,会有个"last"索引去记录上次匹配成功的字符对应的下一个索引值,此处为1,所以是从待匹配字符实质为"23"。 // 调用matcher.reset()即可重置匹配器 } }
3.group方法,分组的深入学习
package com.learn.regex.part1; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PatternTest2 { public static void main(String[] args) { // 深入group,group的意思:捕获组可以通过从左到右计算其开括号来编号,组零始终代表整个表达式 Pattern pattern = Pattern.compile("(\\d)(\\d)(\\d)"); Matcher matcher = pattern.matcher("123"); if (matcher.matches()) {// 注意:只有当匹配操作成功,才可以使用start(),end(),group()三个方法,否则会抛出java.lang.IllegalStateException,也就是当matches(),lookingAt(),find()其中任意一个方法返回true时,才可以使用. /* * 从上述可知: * group 0代表整个表达式,所以是123 * group 1从左到右计算其开括号来编号,即为第一个(\\d),对应的匹配值为1,所以group 1 = 1 下面同上 * group 2 = 2 * group 3 = 3 * */ //所以我们可以用这种方式另类实现反向(开玩笑),此group用法在我们要对原字符串进行部分替换时有很大用处 System.out.println(matcher.group(3) + matcher.group(2) + matcher.group(1)); } //ex1:将下述日期格式转换为08/12/2016 String strDate = "2016-12-08"; Pattern p = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})"); Matcher m = p.matcher(strDate); if(m.matches()) { System.out.println(m.group(3) + "/" + m.group(2) + "/" + m.group(1)); } } }
4.总结:
本文由于属于个人备忘使用,所以没有对正则表达式的一些常规匹配等做说明。只对java正则表达式进行简单介绍,迟点会出javascript正则表达式详细说明。由于作者之前对正则一知半解,现在进行系统学习,所以上述文章若有错误之处,请各位同学及时指出,共同学习进步。相关文章推荐
- grep, egrep, 基本正则表达式及扩展表达式学习及用法
- Java学习笔记之Pattern类的用法详解(正则表达式)
- Java正则表达式的基本用法
- java正则表达式的基本用法
- Java学习笔记之Pattern类的用法详解(正则表达式)
- Java学习笔记之Pattern类的用法详解(正则表达式)
- [知了堂学习笔记]_ 正则表达式的组成及在Java中常见正则表达式的用法
- [Java] 学习笔记一(String,for循环,多线程,正则表达式,map用法)
- Java学习笔记—正则表达式的用法
- java正则表达式的基本用法
- Java学习笔记之Pattern类的用法详解(正则表达式)
- java中正则表达式基本用法(转)
- php入门学习知识点四 PHP正则表达式基本应用
- 正则表达式基本语法学习
- 正则表达式基本用法
- java正则表达式学习笔记(一)
- 正则表达式学习之一:基本语法
- java正则表达式 学习
- JAVA正则表达式高级用法(分组与捕获)
- 正则表达式学习(Java)