正则表达式
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+)*
相关文章推荐
- poj 2244 最短路 和 poj 1874 畅通工程续 dijkstra(迪杰斯特拉)
- Maven搭建(二)使用m2eclipse创建web项目
- Spinner 获取当前选中项
- 实用知识:CoreLocation的使用(地图展示)
- WebStorm快捷键
- Nhbernate
- poj2828 Buy Tickets(单点更新模拟队列)
- SQL集萃(一) Case…When…Then 实现无表字段拼表格
- Leetcode 14. Longest Common Prefix
- Scrapy爬取美女图片续集
- sscanf和sprintf的用法
- Java的线程
- Java循环练习:求1+(1*2)+(1*2*3)+(1*2*3*4)+(1*2*3*4*5)的和
- 4月4日作业
- 欢迎使用CSDN-markdown编辑器
- 使用rem时chrome中的bug
- 欢迎使用CSDN-markdown编辑器
- UIScrollView 的代理方法简单注解
- C++ 运算符重载
- linux头文件详解