正则表达式浅谈

正则表达式是一个强大的字符串处理工具,可以对字符串尽心查找提取分割替换的操作。String类中也提供了几个特殊的方法:

Boolean matches(String regex)判断字符串是否符合指定的正则表达式

String replaceAll(String regex,String replacement)将所有的匹配的之前的regex替换成之后的字符串就是将前者换成后者

这些特殊的方法都依赖java中的正则表达式,除此之外java还提供了Pattern和matcher的支持两个类专门用于提供志恒则表达式的支持

正则表达式是一种很简单而且实用的工具。正则表达式是一个用于匹配字符串的模板。实际上任意字符串都可以当成正则表达式使用例如字符串“ABC”就是一个正则表达式这样的正则表达式就是只能匹配ABC在正则表达式中可已使用通配符,正则表达式中的通配符远远的超出了通配符的功能被称为预定义字符

“【】”方括号表达式表示的是枚举【abc】表示匹配abc中的任何一个

“-”表示范围比如【a-z】表示的就是如果你想要使用a-z之间的任意字符那么就是用这个

“^”表示求否,【^abc】表示的是不造abc中选择

“&&”表示与运算【a-z&&【def】】表示的是去取a-z和def的交集如果想要使用匹配所有中文字符就可以使用【\\u0041-\\u0056】所有中文的unicode都是连续的这样的话就能使用这样的方式匹配所有的中文字符正则表达式还支持原括号表达式,用于将多和表达是组成一个子表达式圆括号中可以使用或运算符

如果要建立一个匹配000-000-0000使用正则表达式\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d正则表达式这样的看起来比较繁琐实际上正则表达式还提供了数量表示符

Greedy(贪婪模式):数量表示符默认采用贪婪模式除非另有表示贪婪模式的表达式将会一直匹配下去直到无法匹配为止

Reluctant(最小匹配模式)这样的模式用问号(?)后缀表示只会匹配最少的字符

Possessive(占有模式)通常较少的使用

使用正则表达式:

一旦在程序中定义了正则表达式那么就可以使用Pattern和Matcher来使用正则表达式。

Pattern对像是正则表达式编译后在内存中的表示形式,因此正则表达式字符串必须先要被编译成pattern对像然后再利用pattern对像创建Martcher执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以共享一个对象

创建的方法如下:

//将字符串编译成Pattern对像

Pattern p = Pattern.compile(“a*b”);

//使用pattern对像创建Matcher对像

Matcher m = p.matcher(“aaaaaaab”);

Boolean b = a.matches();//返回true

上面定义的Pattern对像可以多次使用,如果某个正则表达式仅需要使用一次,则可以直接使用Pattern类的静态方法matches()使一个字符串编译成一个匿名的Pattern对像并执行匹配如下代码:

Boolean  b = Pattern.matches(“a*b”,”aaab”);

上面的一句就是最上面三句的组合

Pattern是不可变类,可提供多个并法线程安全使用

Matcher类提供了如下几个常用的方法:

Find():返回目标字符串中是否包含和Pattern匹配的子串

Group():返回上一次和Pattern匹配的字符串

Start():返回上一次和Pattern匹配的子串在目标字符串的开始的位置。

End():和上面的相反返回最后的

Matcher():返回整合目标自古穿与Pattern是否匹配

Reset():将现有的Matcher对像用于一个新的字符串序列

通过Matcher的find()和group()方法可以从目标字符串依次取出特子串(匹配正则表达式的子串就想互联网爬虫一样)

Public  class FindGroup{

Public static void main(String [] aegs){

String str = “我有一本书叫做java,尽快联系我我的电话13500006666”+”交朋友电话15322223636”;

Matcher m = Pattern.compile(“((13\\d|15\\d))\\d{8}”);

While(m.find()){

System.out.println(m.group());

}

}

}

上面的输出的结果就是电话号码

从上面的结果了一看出来,find()方法一次找到字符串中pattern匹配的字符串找到对应的子串,下次调用find()方法是将接着向下查找

如果想要更加深入的理解请参考相应专门介绍的网站

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 22:13:27

正则表达式浅谈的相关文章

浅谈正则表达式中的分组和引用

问题 我的答案 说明 由正则表达式如何匹配相同字符出发,讲讲正则表达式中的选择.分组和引用. 问题 在外刊君读者群中看到有人提出这样的一个需求: 把字符串切成连续相同字符的正则怎么写?比如abbcccdddd切成a,bb,ccc,dddd 之前我对正则表达式也是略有研究,想尝试一下.其实我对正则表达式的学习基本完全来源于犀牛书的第10章,真正看懂这一章,我觉得操作正则表达式应该不在话下. 我的答案 先给出我的答案吧: 'abbccddd'.match(/(w)1*/g) // ["a"

python浅谈正则的常用方法

python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去找内容,因为容易理解也方便,),而是正则用好用精通的很难(看过正则表的应该都知道,里面符号对应的方法规则有很多,很灵活),对于接触编程不久的朋友们来说很可能在编程的过程上浪费很多时间,今天我把经常会用到正则简单介绍下,如果不是很特殊基本都覆盖使用. 1.正则的简单介绍 首先你得导入正则方法 impo

浅谈图片服务器的架构演进

浅谈图片服务器的架构演进 现在几乎任何一个网站.Web App以及移动APP等应用都需要有图片展示的功能,对于图片功能从下至上都是很重要的.必须要具有前瞻性的规划好图片服务器,图片的上传和下载速度至关重要,当然这并不是说一上来就搞很NB的架构,至少具备一定扩展性和稳定性.虽然各种架构设计都有,在这里我只是谈谈我的一些个人想法. 对于图片服务器来说IO无疑是消耗资源最为严重的,对于web应用来说需要将图片服务器做一定的分离,否则很可能因为图片服务器的IO负载导致应用 崩溃.因此尤其对于大型网站和应

浅谈 编译器 & 自然语言处理

============================================== copyright: KIRA-lzn ============================================== 转载请注明出处,这篇是我原创,翻版必究!!!!!!!!!!!!!!!!!!! ============================================== 如果觉得写个好,请留个言,点个赞. 自我介绍:本人13届 USTC 研一学生,菜鸟一枚,目前在int

蚂蚁变大象:浅谈常规网站是如何从小变大的(二)(转)

原文:http://blog.sina.com.cn/s/blog_6203dcd60100xokd.html          [第四阶段 : 第一次服务多机化] 当IO性能得到解决以后,我们可能就会面临CPU瓶颈,即程序处理不过来了.那这个时候,最好的方式,就是优化程序.从整体架构和具体业务逻辑上去分析并做优化(可以借助一些性能分析工具,如gprof,xprof等).根据之前的经验,反射.正则表达式.字符串拼接.内存拷贝等是吃CPU的大户,所以优化上可以重点考虑.通过性能优化,一般可以将性能

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转化为string类型: console.log(true.toString());//"true" console.log(false.toString());//"false&quo

Linux特殊符号浅谈

Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可以分以下几类 1.管道符号 字符 名称 功能描述 | 管道 传递的普通的字符串,来自于前一个命令 |xargs 管道流转换 与xargs 传递的是把字符串变成了文件名 2.目录结构 字符 名称 功能描述 . 当前目录 .. 当前目录上一级目录 3.重定向符号 字符 名称 功能描述 > 输出重定向 会

浅谈QMVC APP开发

 自从吾修主页上发布了QMVC源码,非常感兴趣,用了半月的时间学习,真的感觉收益非浅,在此声明非常感谢吾修大哥的分享! 1.轻快简单,框架就几个类,简单,当然代码少也就运行快!单纯的MVC,使的如果你想扩展框架,可以轻易的在QMVC上增加和减少功能,也就是说更容易的去修改和读懂源码. 2.可以与webform框架融合,也就是说你用webform和mvc共同在同一个项目中运行. 3.QMVC APP开发,QMVC APP可以轻易实现多个QMVC项目合并到一个项目中运行,也可以轻易将其分离开独立

Linux的文本处理工具浅谈-awk sed grep

Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS竖着切,列的分隔符 RS横着切,行的分隔符 [语法格式] awk [–F] [“[分隔符]”] [’{print$1,$NF}’] [目标文件] awk 'BEGIN{FS="[列分隔符]+";RS="[行分隔符]+";print "-GEGIN-"