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

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

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

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

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

 Pattern p=Pattern.compile("\\d+"); //匹配数字
String[] str=p.split(sequence); //分割
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. Attribute在.NET编程中的应用(三)

    用于参数的Attribute 在编写多层应用程序的时候,你是否为每次要写大量类似的数据访问代码而感到枯燥无味?比如我们需要编写调用存储过程的代码,或者编写T_SQL代码,这些代码往往需要传递各种参数, ...

  2. ubuntu-16.04使用MDK3伪造wifi热点和攻击wifi热点至死

    MDK3是? MDK3 是一款无线DOS 攻击测试工具,能够发起Beacon Flood.Authentication DoS.Deauthentication/Disassociation Amok ...

  3. 史上最强学生管理系统之ArrayList版

    其实不管是网上或者培训班,都会有学生管理系统的最基础版本,本人也不过是照猫画虎,在某些细节方面进行了一些渲染,使这个最基本的小程序更加人性化和便于利于操作一点,个人愚见,大牛勿喷,欢迎转载(请注明出处 ...

  4. configpraser模块

    configpraser配置文件,example.conf [data] #节点 username = Jason password = 123 [public] comment = stuff pu ...

  5. PHP中MD5函数漏洞

    题目描述 一个网页,不妨设URL为http://haha.com,打开之后是这样的 if (isset($_GET['a']) and isset($_GET['b'])) { if ($_GET[' ...

  6. LSF-SCNN:一种基于 CNN 的短文本表达模型及相似度计算的全新优化模型

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本篇文章是我在读期间,对自然语言处理中的文本相似度问题研究取得的一点小成果.如果你对自然语言处理 (natural language proc ...

  7. CNCC2017中的深度学习与跨媒体智能

    CNCC2017中的深度学习与跨媒体智能 转载请注明作者:梦里茶 目录 机器学习与跨媒体智能 传统方法与深度学习 图像分割 小数据集下的深度学习 语音前沿技术 生成模型 基于贝叶斯的视觉信息编解码 珠 ...

  8. SpringMvc架构下css、js、jpg加载失败问题

    SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...

  9. 关于MVC Ajax.BeginForm()异步上传文件的问题

    问题描述: 如果用juqery原生的异步上传方式,只要如下方法即可 $.ajax({ type: "GET", url: "test.json", data: ...

  10. 第七届C/C++B-方格填数 DFS

    方格填数 如下的10个格子    +--+--+--+    |  |  |  | +--+--+--+--+ |  |  |  |  | +--+--+--+--+ |  |  |  | +--+- ...