正则表达式-Java上的应用

在上一篇正则表达式http://guidongyuan.cn/2017/07/09/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F中介绍了正则表达式的规则,这篇主要讲正则表达式在Java中几个类的使用。

JDK中,与正则表达式有关的类都在java.util,regex,主要是Pattern类和Matcher类,String类中也有分别方法可以使用正则表达式。

文章主要结合《java编程思想》和Java的开发文档,选取了日常开发中经常用到的方法进行分析,再自己编写用例熟悉其用法以及验证理解是否正确。

在正则表达式中用于转义,由于java对其有特殊的处理方式,如果需要插入一个需要使用,如正则表达式中的在java中为,插入一个普通的在java中为。

String类

匹配boolean matches(String regex)方法

判断整个字符串是否匹配regex表示的正则表达式

替换

String replace(char oldchar,char newchar)String replace(CharSequence target,CharSequence replacement)

replace() 没有用到正则表达式,第一个参数(被替换的字符)和第二个参数(替换的字符)都是普通字符

String replaceFirst(String regex,String replacement)

参数replacement根据regex正则表达式替换掉第一个匹配成功的部分

String replaceAll(String regex,String replacement)

参数replacement根据regex正则表达式替换掉所有匹配成功的部分

分割

String[] split(String regex)

根据regex进行分割,匹配到的字符不输出

String[] split(String regex,int limit)

limit限制了分割后的数组的数量,达到限制的数量后不再进行分割,直接输出

Pattern 和 Matcher类

基本用法

Pattern类

查找static Pattern compile(String regex)

通过设置正则表达式参数regex生成一个Pattern对象

Matcher matcher(CharSequence input)

通过传入要检索的字符串参数生成一个Matcher对象

static boolean matches()

检查regex是否匹配整个字符串,regex可以通过Pattern.compile(regex)设置,也可以直接通过Pattern类中的matches(regex,input)设置,可以参考上面的范例。

static Pattern compile(String regex,int flag)

compile()的另外一个方法,flag是Pattern中的标记,用于调整匹配的行为,常用的标记如下:

String flags() 和 int pattern()

flags()返回Pattern设置的flag,pattern()返回Pattern设置的regex

替换

Pattern类中的split()方法与String类中的使用一致,可以参考上面的String类

matcher类

查找boolean lookingat()

lookingAt()与matches()和find()类似,不过其只对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true

boolean find()

遍历字符串,查找多个匹配,匹配到就返回true,否则为false

boolean find(int index)

find带参数,表示该字符串中字符的位置,并以其作为搜索的起点

String group()

group表示组,group( )返回前一次匹配操作的第0组,也可以通过group(int i)指定返回在前一次匹配操作期间指定的组号,如果匹配成功,但是指定的组没有匹配输入字符串的任何部分,则返回null。

int groupCount()

返回分组的数目,第0组不包括在内

int start(int group)

返回在前一次匹配操作中寻找到的组的起始索引,start()和start(0)一致,为第0个分组。

int end(int group)

返回在前一次匹配操作中寻找到的组的最后一个字符索引加一的值

注意:

Matcher reset(CharSequence input)

将现有的Matcher对象应用于一个新的字符序列中,如果采用不带参数的reset()方法,可以将Mathcer对象重新设置到当前字符序列的起始位置。

Matcher appendReplacement(StringBuffer sb,String replacement)Matcher appendTail(StringBuffer sb)

appendReplacement()和replaceFirst()以及replaceAll()都是用来进行替代操作,区别在于不是使用一个固定的字符串replacement一次性进行替换,而是采用渐进式的替换。appendTail(),在执行了一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下的部分复制到sb中。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181117G0PWZS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券