一、正则表达式练习工具:
可下载使用该工具:http://download.csdn.net/download/lyhdream/10132810
或者在线练习:
http://tool.oschina.net/regex/
参考地址:http://blog.jobbole.com/63398/
正则表达式教程:http://deerchao.net/tutorials/regex/regex.htm
二、常用正则表达式字符
常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用限定符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用反义词
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
三、正则表达式练习题
正则表达式中包含了一系列的字符,这些字符只能匹配它们本身。有一些被称为“元字符”的特殊字符,可以匹配一些特殊规则。
1、普通字符的练习
cat 匹配 cat
dog 匹配 dog
2、点“.”字符的使用【“.”字符匹配任意一个字符】
字符类:
c.t 可匹配 cat、cot ,cmt ,czt 等等
使用\ 反斜杠,忽略元字符,例如:
c\.t 只能匹配 c.t
c\\t 只能匹配 c\t
3、方括号的使用“[]”
[abcd] 可匹配 a,b,c,d中的任意一个字符,例如
c[abc]t 可匹配 cat,cbt,cct
方括号中的字母顺序并不重要,例如:[abc] 等同于[bca]
使用反斜杠忽略元字符“\”: c\[t 只能匹配 c[t
字符范围:
[b-f]等同于[bcdef]
[A-Z]等同于[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
练习:
【我们要匹配:hh-mm-ss 这种格式的时间,如下:】
[0-2][0-9]-[0-5][0-9]-[0-5][0-9]
【我们要匹配:YYYY-MM-DD 这样的年-月-日 格式,如下:】
[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
字符的反义:
[^a] 匹配任何不是 a 的字符
[^a-zA-Z0-9] 匹配任何不适数组也不是字母的字符
[\^abc] 可以匹配:^,a,b,c中的任意一个字符
[^\^] 表示匹配任意不为 ^ 的字符
练习:
【找到一个at之前没有c的单词,即不适cat的单词】
[^c]at
4、转义字符:
\d 匹配任意一个数字,相当于[0-9]
\w 匹配一个数字或字符,相当于[0-9a-zA-Z]
\D 匹配一个非数字,相当于[^0-9]
\W 匹配一个非数字或字母,相当于[^0-9a-zA-Z]
练习:
【简化:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]的写法:】
\d\d\d\d-\d\d-\d\d
5、重复字符“{}”,使用大括号:
a{3} 表示字符串aaa ,即a重复3次的意思
a\{2\} 表示字符串a{2}
[{}] 表示匹配一个左边的大括号或右边的大括号
练习:
【简化下面的表达式:
z.......z
\d\d\d\d-\d\d-\d\d
[aeiou][aeiou][aeiou][aeiou][aeiou][aeiou]
[bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz][bcdfghjklmnpqrstvwxyz]
】
答案:
【
z.{7}z
\d{4}-\d{2}-\d{2}
[aeiou]{6}
[bcdfghjklmnpqrstvwxyz]{10}
】
指定重复范围:
a{4,4} 相当于 a{4}
colou{0,1} r 可表示colour或color
a{3,5} 可表示 : aaaaa,aaaa,aaa
a{1,} 表示匹配一个或以上的连续字符a ,相当于: a+
.{0,} 表示匹配任意字符,相当于: .*
练习:
【匹配双引号之间的任意字符,包含前后的双引号:】
".{0,}" 也可以使用 ".*"
6、关于重复的转义字符:
?表示重复0次货一次,相当于: {0,1}
*表示重复0次货多次,相当于: {0,}
+表示重复1次或多次,相当于: {1,}
\?\*\+ 表示匹配 ?*+
{?*+} 表示匹配一个?*或+
练习:
【简化下面的表达式:
".{0,}" and "[^"]{0,}"
x?x?x?
y*y*
z+z+z+z+
】
答案:
【
“.*"and"[^"]*
x{0,3}
y*
z{4,}
】
7、选择匹配“|”,竖线
cat|dog 表示匹配cat 或者dog
a|b|c 相当于 [abc]
cat|dog|\| 表示匹配 cat dog 或者 |
[cat|dog] 表示匹配c a t d o g 或者 |
练习:
【简化下面表达式:
s|t|u|v|w
aa|ab|ba|bb
[abc]|[^abc]
[^ab]|[^bc]
[ab][ab][ab]?[ab]?
】
答案:
【
[stuvw]
[ab]{2}
.
[^b]
[ab]{2,4}
】
使用真正表达式匹配0到31之间的数:
[0-9]|[12][0-9]|3[01]
8、分组“()”,使用括号
(Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day 表示一周的某一天
(white|yellow|grew|black)cat 表示4种颜色的猫的任意一种
\(\) 表示一对括号
[()]表示正括号或者反括号
9、单词分割符 \b
在单词和单词之间有单词分隔符,文本的开头和结尾通常有单词分割符
\b\w\w\w\b 表示一个3个字母的单词
10、换行
^ 表示行的开始
$ 表示行的结束
^$ 表示一个空行
^.*$ 表示整行
\^\$ 表示匹配 ^或 $
[$] 表示匹配 $
[^] 不和法,应该写为 [\^] ,表示匹配一个^
11、贪婪与非贪婪匹配
如:String str="abcaxc";
Patter p="ab*c";
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。
编程中如何区分两种模式
默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。
下面的都是量词:
{m,n}:m到n个
*:任意多个
+:一个到多个
?:0或一个