正则表达式与模式匹配

之前,总是听说正则表达式,可总不清楚什么是正则表达式!现在搞清楚了!

1.正则表达式

           一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式中的元字符。比如,"//dok"中的 //d 就是有特殊意义的元字符,代表0~9中的任何一个。一个正则表达式也成为一个模式,字符串"9ok"和"1ok"都是与模式//dok匹配的字符串。与一个模式匹配的字符串称为匹配模式字符串(也称为模式匹配字符串)。

2.模式匹配

           模式匹配就是检索和指定模式匹配的字符串。java提供了专门用来进行模式匹配的类,这些类在java.util.regex包中。

           1)建立模式对象

进行模式匹配的第一步就是使用Pattern类创建一个对象,称为模式对象。Pattern类调用类方法compile(String pattern)来完成这一任务,参数pattern是一个正则表达式,称为模式对象使用的模式。例如,我们使用正则表达式"A//d"建立一个模式对象p:

             Pattern p=Pattern.compile("A//d");

如果参数pattern指定的正则表达式有错,compile()方法将抛出异常:PatternSyntaxException.

Pattern类也可以调用类方法compile(String regex,int flags)返回一个Pattern对象,参数flags可以取下列有效值:

             Pattern.CASE_INSENSITIVE

             Pattern.MULTILINE

             Pattern.DOTALL

             Pattern.UNICODE_CASE

             Pattern.CANON_EQ

例如,flags取值Pattern.CASE_INSENSITIVE,则模式匹配时将忽略大小写。

 

             2)建立匹配对象
 模式对象p调用matcher(CharSequence input)方法返回一个Matcher对象m,称作匹配对象,参数input可以是任何一个实现了CharSequence接口的类创建的对象,我们前面学习的String类和StringBuffer类都使用了CharSequence接口。
一个Matcher对象m可以使用下列3个方法寻找参数input指定的字符序列中是否有和模式patter匹配的子序列(patter是创建模式对象p时使用的正则表达式)。
n
public boolean matches():判断input是否完全和patter匹配。
n
public boolean find() :寻找input和patter匹配的下一子序列
 下列几个方法也是Matcher对象m常用的方法
n public boolean find(int start)  判断input从参数start指定位置开始是否有和patter匹配的子序列,参数start取值0时,该方法和lookingAt()的功能相同。
n public String replaceAll(String replacement)  Matcher对象m调用该方法可以返回一个字符串对象,该字符串是通过把input中与模式patter匹配的子字符串全部替换为参数replacement指定的字符串得到的(注意,input本身没有发生变化)。
n public String replaceFirst(String replacement)  Matcher对象m调用该方法可以返回一个字符串对象,该字符串是通过把input中第1个与模式patter匹配的子字符串替换为参数replacement指定的字符串得到的(注意,input本身没有发生变化)
public boolean lookingAt():判断从input的开始位置是否有和patter匹配的子序列。
 
在正则表达式(模式)中可以使用一对方括号括起若干个字符,代 表方括号中的任何一个字符。例如pattern=“[159]ABC”,那么“1ABC” 、“5ABC”和“9ABC”都是和模式pattern匹配的字符序列。  方括号模式的一些意义如下:
    [abc]:代表a、b、c中的任何一个。
    [^abc]:代表除了a、b、c以外的任何字符
    [a-d]:代表 a至d中的任何一个。
    另外,中括号里允许嵌套中括号,可以进行并、交、差运算,例如:
    [a-d[m-p]]:代表 a至d, 或 m 至 p中的任何字符(并)。
    [a-z&&[def]] :代表d、 e、或 f中的任何一个(交)。
    [a-f&&[^bc]]:  :代表a、d、e、f (差)
限定符模式
用X代表正则表达式中的一个元字符或普通字符,那么X?就表示X 出现0次或1次,例如
    pattern=“A[1359]?”( X是“[1359]”),那么“A”、“A1”、“A3”、“A5”、“A9”是匹配模式pattern的全部字符串。再比如,pattern=“@//w{4}”( X是“//w”),那么“@abcd”、“@girl”、“@moon”、“@flag” 都是匹配模式pattern的字符串之一。
模式的逻辑或
 
模式可以使用“|”位运算符进行逻辑“或”运算得到一个新模 式。例如,pattern1、pattern2是两个模式,即两个正则表达 式。那么
  pattern=pattern1|pattern2 
  就是两个模式的“或”。一个字符串如果匹配模式pattren1或匹配模式pattern2,那么就匹配模式pattern
正则表达式与字符串分解
n String 类提供了一个实用的方法:
n public String[] split(String regex)
n 字符串调用该方法时,使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中
 
public boolean matches():判断input是否完 全和patter匹配。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值