java正则表达式总结

    最近工作要使用文件上传解析,上传还好,但是在解析文件的时候,却踩到了好多坑,今天就说说其中的一块吧,正则匹配。

由于上传的文件统一都是csv文件,所以在解析文本的时候,肯定要碰到正则表达式的,先解释一下,csv文件类似excel文件,但是各个数据之间是以逗号隔开的,而需求是,上传的csv文件中某些字段是json格式的字符串,这就是说,有可能json里面也是会有逗号的,因此,使用网上的代码或者java提供的api是不能满足需求的,必须要去手动解析文件。好了,下面我们讲解java语言下的正则表达式的用法。

     在java中要使用正则表达式常用的方法,请看如下代码:

 1     /* Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,
 2      pattern()返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数*/
 3     String sequence;
 4     Pattern indexPattern = Pattern.compile ("\\[(.*?)\\]");   //通过Pattern的静态方法去创建一个正则表达式
 5     //System.out.println(indexPattern.pattern());   //。 return:  \\[(.*?)\\]
 7     Matcher indexMatcher = indexPattern.matcher (sequence);  //进行匹配
 8     while(indexMatcher.find())//find方法是查找串中是否包含正则表达式的子串,matches()方法是去匹配串是否符合正则表达式的规则,一旦有一个子串不符合,返回false
 9     {
10         System.out.println(indexMatcher.groupCount()+":"+indexMatcher.group());//group()函数存放的就是匹配的结果,也可以使用indexMatcher.start()和indexMatcher.end()函数来取得匹配到的子串在字符串中的位置索引
11     }

 还有2个重要方法在此也要说明一下,就是正则表达式分割和替换:

1 Pattern p=Pattern.compile("\\d+"); //匹配数字  
3 String[] str=p.split(sequence);   //分割
5 String newSequence = sequence.replaceAll("\\d+" , "#")  //将串中所有的数字都用#替换

 

 split()将模式串按照给定的正则表达式切割成字符串数组。

下面我们讲讲正则表达式本身吧:有时候这么奇奇怪怪的一串却能让你少写很多的代码。下面整理了正则表达式的常用的语法:

 
写法 符合匹配规则的串
. 任何字符
a?  a一次或一次也没有 
 a*  a零次或多次 
 a+ a一次或多次
 a{n}?  a恰好 n 次 
  a{n,}?
a至少n次  
 a{n,m}? a至少n次,但是不超过m次 
[abc] abc(简单类) 
 [^abc] 任何字符,除了 abc(否定) 
  [a-zA-Z] azAZ,两头的字母包括在内(范围) 
  [a-d[m-p]] admp[a-dm-p](并集)
 [a-z&&[def]] def(交集)  
[a-z&&[^bc]]  
az,除了 bc[ad-z](减去)  
 [a-z&&[^m-p]]  az,而非 mp[a-lq-z](减去)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关于java中的正则表达式的大概用法就总结道这里,还有很多细节的东西留在后面再作整理吧。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-07-20 14:51  jy的blog  阅读(561)  评论(0编辑  收藏  举报