您的位置:首页 > 其它

正则表达式

2016-04-30 20:38 369 查看

什么是正则表达式

正则表达式,又叫模式,实际是一个特殊的字符串,串中含有一些具有特殊含义的字符,当然也可以不含有,就是一个普通的字符串,这些特殊字符被称为元字符,元字符可以代表若干字符。

什么是模式匹配

模式匹配是指,我们先给出一个指定的模式,即正则表达式,可以将模式理解为标准,那下一步就是寻找与此模式,或者标准,匹配的字符串,我们给出一个要参与匹配的字符串,此字符串是否与正则表达式匹配,或者说是否符合标准,有两个层面,第一是,整个参与匹配的字符串完全与正则表达式匹配,第二是,仅仅是参与匹配的字符串中的某个子串完全与正则表达式匹配,符合这两个标准的任何一个都可以称该字符串被匹配成功,即符合标准,这么来看,要想匹配成功的前提是参与匹配的字符串的长度要 >= 模式串所能表示的串的最大长度,这句话不完全对,暂且先这么理解。

元字符例举

字符类

.,匹配除了\n换行字符以外的任意一个字符,必须要有一个且只能有一个字符,如r.t可以匹配rat,rut,r t,abcrxt,但是不能匹配rt,rabt。

\d,匹配0-9的任意一个数字。

\w,匹配任意一个数字,字母,下划线或汉字,不能匹配$。

\s,匹配任意一个空白类字符,如\r,\n,\t,\v,\f,\ox20,分别表示回车,换行,横向制表,纵向制表,换页,空格,\t横向制表,是指在已输出的字符的基础上后补空格已达到整8倍的字符个数,如前已输出3个字符,\t会再输出5个空格字符,凑齐八个字符,若前已输出10个字符,\t会再输出6个空格字符,凑齐十六个字符。

字符限定类

[abc],匹配a,b,c中的任意一个字符。

[^abc],除a,b,c中的任何字符。

[a-d],a到d中的任意一个字符。

[a-d[n-p]]或[a-dn-p],等价于[a-d]|[n-p],即a到d或n到p中的任意一个字符,|也是元字符,用于连接两种都可选的规则。

[a-z&&[def]]或[a-z&&def],等价于[a-z]&&[def],即a到z且def中的任意一个字符,实际就是[def],即d、e、f中的任意一个字符。

[a-f&&[^bc]]或[a-f&&^bc],等价于[a-f]-[bc],即[adef],这里的^,放在[ ]之内表示求补运算,同样[.?!],表示匹配标点符号 . ?或!,而不是元字符。

反义类

\D,\d的反义,匹配任意一个非数字字符。

\W,\w的反义,匹配除字母,数字,下划线和汉字的任意一个字符,如$。

\S,\s的反义,匹配任意一个非空白类字符。

\B,\b的反义,匹配不以此字符开头或结尾的单词。

首尾限定类

\b,匹配一个单词的开始或结束处,如\ba\w*,表示单词要以a开头,可以匹配axbqt,如\w*c\b,表示单词要以c结尾,可以匹配axbqtc,注意匹配的是单词,中间不能有空格。如axb qtc仅能匹配出qtc,如\b\d{5, 12}\b,只能匹配5到12位数字,如QQ号。

,匹配一个字符串或一行的结束符,如ab,匹配一个字符串或一行的结束符,如ab,可以匹配任何一个以ab结尾的字符串,如I am ab,但是不能匹配I am abc。

^,匹配一个字符串或一行的开始符,如^ab,可以匹配任何一个以ab开头的字符串,如abc and x,但是不能匹配zabc and x。

数量限定类

,为数量限定元字符,表示在之前的那个字符可以被匹配0次或多次,如xy*z,表示之前的字符y可以被匹配0次或多次,xz,xyz,xyyz,如a.*b, . 表示之前的元字符 . ,可以被匹配任意数量的任何字符,axxyyzzsdrpb,如a.*?b,?表示不使用贪婪策略,即匹配最少的字符个数,该模式实际可以匹配任何以a开头,以b结尾,中间是任何数量的任何字符的字符串,aababab,第一个子串只会匹配出aab,即最少字符个数的匹配,如果不用?,即使用贪婪策略,会匹配aababab整个字符串,即最多个字符个数的匹配。

+,为数量限定元字符,表示在+之前的那个字符可以被匹配1次或多次。

?,为数量限定元字符,表示在?之前的那个字符可以被匹配0次或1次, .*? 就是匹配最小子串。

{i}或{i, j}或{i,},为数量限定元字符,表示在{i}或{i, j}或{i,}之前的字符或元字符表达式必须被匹配指定数量的i个或i到j个或i个到更多个字符,如w{3}.,可以匹配www.xx.com,不能匹配ww.xx.com或wwww.xx.com,必须是指定的数量,如w{3}w.,可以匹配到wwww.xx.com,如w{3, 5}.,可以匹配www.xx.com,wwww.xx.com,wwwww.xx.com,不能匹配ww.xx.com。

分组类

(),可以对小括号内的整个表达式使用修饰元字符,如只可以将在之前的一个字符重复0次或多次,若用小括号扩起多个字符,如(abc),表示可以将*之前小括号内的表达式重复0次或多次,小括号属于元字符,要想使用原义,必须转义,(,)

转义字符类

\,转义字符,表示后面的字符被当作普通字符使用,而不是元字符,如w{3}.,可以匹配www.xx.com,不能匹配wwwaxx.com,如.,*,\都可以只用原义。

模式匹配

java.util.regex.Pattern类是专门用于完成模式匹配的类,regex是regular expression的缩写。
参数pattern是正则表达式,对象p为此正则表达式的模式对象
Pattern p = Pattern.compile(String pattern);
str为要参与匹配的字符串
String str = “”;
根据待匹配的字符串str,生成匹配结果对象m
Matcher m = p.matcher(str);
while(m.find()) {
String s = m.group();
int first = m.start();
int last = m.end();
}


find方法,从str中找出下一个与pattern匹配的子串,第一次调用返回第一个匹配的子串,第二次调用返回第二个匹配的子串,依次类推,重载方法find(int start)表示从str中的start位置开始寻找匹配的子串。

find方法之后,调用start和end会返回匹配的子序列在str中的起始位置。

m.matches();

判断str是否和pattern完全匹配,返回boolean型,为true,可以直接调用group。

正则表达式举例

[a-zA-Z]\w{2,14}[0-9a-zA-Z]\@\w+([-.]\w+)*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: