之前,总是听说正则表达式,可总不清楚什么是正则表达式!现在搞清楚了!
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匹配。