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

由于上传的文件统一都是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: \\[(.*?)\\]
  6. Matcher indexMatcher = indexPattern.matcher (sequence); //进行匹配
  7. while(indexMatcher.find())//find方法是查找串中是否包含正则表达式的子串,matches()方法是去匹配串是否符合正则表达式的规则,一旦有一个子串不符合,返回false
  8. {
  9. System.out.println(indexMatcher.groupCount()+":"+indexMatcher.group());//group()函数存放的就是匹配的结果,也可以使用indexMatcher.start()和indexMatcher.end()函数来取得匹配到的子串在字符串中的位置索引
  10. }

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

  1. Pattern p=Pattern.compile("\\d+"); //匹配数字
  2. String[] str=p.split(sequence); //分割
  3. 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中的正则表达式的大概用法就总结道这里,还有很多细节的东西留在后面再作整理吧。

java正则表达式总结的更多相关文章

  1. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  2. Java正则表达式入门——转自RUNOOB.COM

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java正则表达式和Perl的是最为相似 ...

  3. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  4. 【转】详解Java正则表达式语法

    (转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...

  5. java正则表达式【大全】

    [正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$& ...

  6. JAVA正则表达式:Pattern类与Matcher类详解(转)

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  7. JAVA正则表达式:Pattern类与Matcher类详解

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...

  8. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  9. Java正则表达式的应用

    在很多种情况下,我们都必须对字符串进行匹配,以便判断字符串的格式是否符合要求,对字符串中的内容进行提取.比如,我要从一段话aabdfe中,判断这段话是否有包含ab这个词,那么如果用if-else来判断 ...

  10. Java正则表达式实用教程

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.java.util.regex包主要包括以下三个类:Pattern.Matcher和PatternSynta ...

随机推荐

  1. word的标题行前面数字变成黑框 解决方案

    如图 图1如下 图2如下 图3如下 如下解决 1. Put your cursor on the heading just right of the black box.将光标定位到标题中,紧邻黑框的 ...

  2. oracle存储过程统计用户各表记录数

    declare v_tName varchar(50); v_sqlanalyze varchar(500); v_num number; v_sql varchar(500); cursor c1  ...

  3. C#中float, double的精度问题

    在工作中我发现了一个C#浮点数的精度问题,以下的程序运行结果并未得到我预期的结果: view source print? 01 namespace FloatTest 02 03     class ...

  4. [转载] Linux的Top命令解析

    转载自http://www.jb51.net/LINUXjishu/34604.html.http://blog.csdn.net/hello_yang213/article/details/7455 ...

  5. 深入学习JS执行--创建执行上下文(变量对象,作用域链,this)

    一.介绍 本篇继上一篇深入理解js执行--单线程的JS,这次我们来深入了解js执行过程中的执行上下文. 本篇涉及到的名词:预执行,执行上下文,变量对象,活动对象,作用域链,this等 二.预执行 在上 ...

  6. sort学习 - LeetCode #406 Queue Reconstruction by Height

    用python实现多级排序,可以像C语言那样写个my_cmp,然后在sort的时候赋给参数cmp即可 但实际上,python处理cmp 是很慢的,因为每次比较都会调用my_cmp:而使用key和rev ...

  7. python学习笔记 loop&&raw_input 7&& if

    1.首先要说range(x) 其返回的是一个list:[0,1,2,....x-1] >>> range(5) [0,1,2,3,4] 2.Loop 共有两种形式,一种for x i ...

  8. Dubbo源码学习--服务发布(ServiceBean、ServiceConfig)

    前面讲过Dubbo SPI拓展机制,通过ExtensionLoader实现可插拔加载拓展,本节将接着分析Dubbo的服务发布过程. 以源码中dubbo-demo模块作为切入口一步步走进Dubbo源码. ...

  9. java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to...异常

    异常: Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot ...

  10. leetcode series:Two Sum

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...