《正则表达式必知必会》学习笔记
《正则表达式必知必会》学习笔记
第二章.匹配单个字符
例子一...
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
name
结果:
匹配个数1,匹配的位置9
注意:正则表达式默认区分字母大小写。
----------------------------------
例子二...有多个匹配结果
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
my
结果:
匹配个数2,匹配的位置有两个,第一个是6,第二个是21
----------------------------------
例子三...匹配任意单个字符
文本:
ab
c
正则表达式:
.b
结果:
匹配个数1,匹配的位置0
如果正则表达式:
.a
结果:
匹配个数为0
如果正则表达式:
.c
结果:
匹配个数为0
说明:点.是任意单个字符,不包括没有和换行符。
-------------------------------------------------------------------------
第三章 匹配一组字符
例子一...匹配多个字符中的某一个
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
[ea]ll
结果:
匹配个数1,匹配的位置1,匹配的结果字符串是ell
说明:方括号[]里面的多个字符,里面的任意一字符可拿出来,但仅仅是拿出一个,不能两个或以上。
----------------------------------
例子二...利用字符集合区间
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
[ns]a[0-9]\.xls
结果:
匹配个数3,匹配的位置分别是69,78,87
说明:所谓字符区间[0-9]表示[0123456789],然后[A-Z],[a-z],[A-F]你懂的。字符区间的首,尾字符可以是ASCII字符表里的任意字符。
----------------------------------
例子三...取非匹配
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
[ns]a[^0-9]\.xls
结果:
匹配个数1,匹配的位置分别是69
说明:^这个符号表示对字符区间集合进行取非操作,比如[^0-9]表示不是任何数字的字符
-------------------------------------------------------------------------
第四章 使用元字符
例子一...匹配空白字符
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
\n\r
结果:
匹配个数0.
如果正则表达式:
\n
结果:
匹配个数8.匹配的位置分别是32,44,55,68,77,86,95,104。
如果正则表达式:
\r
结果:
匹配个数8.匹配的位置分别是31,43,54,67,76,85,94,103。
如果正则表达式:
\r\n
结果:
匹配个数8.匹配的位置分别是31,43,54,67,76,85,94,103。
说明:在Windows操作系统,文本行的结束标签是\r\n。下面是一个空白元字符的对照表
[\b] 回退字符(Backspace键)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符
----------------------------------
例子二...匹配数字(非数字),匹配字母和数字(与非字母和数字),匹配空白字符
说明:
\d等同于[0-9],等同于[0123456789]; \D等同于[^0-9];
\w等同于[a-zA-Z0-9_]就是任何一个大小写字母和数字和下划线;\W等同于[^a-zA-Z0-9_]
\s等同于[\f\n\r\t\v]就是空白字符啦,\S等同于[^\f\n\r\t\v]
----------------------------------
例子三...匹配十六进制或八进制标明的ASCII字符,使用POSIX字符集合
说明:
\x0A等同于ASCII字符10,也就是换行符,也就是\n。这是十六进制。
\011等同于ASCII字符9,也就是制表符。这事八进制。
对于POSIX字符集合,只不过是[0-9][a-z]等等的另一种表达方式,Javascript和.NET的正则不支持。
-------------------------------------------------------------------------
第五章 重复匹配
例子一...匹配一个或多个字符
文本:
My Email is ttt@ccc.com.It is a good Email!
正则表达式:
\w+@\w+\.\w+
结果:
匹配个数1,匹配的位置是12
说明:+表示匹配一个或多个字符(至少一个,不匹配零个字符的情况)
文本:
My Email is rrr.ttt@ccc.com.It is a good Email!
正则表达式:
\w+@\w+\.\w+
结果:
匹配个数1,匹配到的字符串是ttt@ccc.com
如果正则表达式:
[\w.]+@\w+\.\w+
结果:
匹配个数1,匹配到的字符串是rrr.ttt@ccc.com
说明:我们没有对字符集合[\w.]里面的.字符进行转义,但最后还是匹配出来。一般来说,在[]里面的元字符.和+都被解释为普通字符,不需转义。当然,转义了也没坏处。
----------------------------------
例子二...匹配零个或多个字符
文本:
Hello .god@hotmail.com is my Email!
正则表达式:
[\w.]+@\w+\.\w+
结果:
匹配到的字符串是.god@hotmail.com
如果正则表达式:
\w+[\w.]*@\w+\.\w+
结果:
匹配到的字符串是god@hotmail.com
说明:*这个符号表示匹配零个或多个字符,也就是表示可有可无的意思。
文本:
Hello .god.@hotmail.com is my Email!
正则表达式:
\w+[\w.]*@\w+\.\w+
结果:
匹配到的字符串是god.@hotmail.com
如果正则表达式:
\w+[\w.]*\w@\w+\.\w+
结果:
没有匹配字符串
----------------------------------
例子三...匹配零个或一个字符
文本:
The URL is http://www.g.cn,to connect securely use https://www.g.cn/ instead
正则表达式:
http://[\w./]+
结果:
匹配个数为1,匹配到的字符串是http://www.g.cn
如果正则表达式:
https?://[\w./]+
结果:
匹配个数为2,匹配到的字符串分别是http://www.g.cn和https://www.g.cn/
说明:?这个符号表示的是,我前面的字符要么不出现,要么最多出现一次。
第二章.匹配单个字符
例子一...
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
name
结果:
匹配个数1,匹配的位置9
注意:正则表达式默认区分字母大小写。
----------------------------------
例子二...有多个匹配结果
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
my
结果:
匹配个数2,匹配的位置有两个,第一个是6,第二个是21
----------------------------------
例子三...匹配任意单个字符
文本:
ab
c
正则表达式:
.b
结果:
匹配个数1,匹配的位置0
如果正则表达式:
.a
结果:
匹配个数为0
如果正则表达式:
.c
结果:
匹配个数为0
说明:点.是任意单个字符,不包括没有和换行符。
-------------------------------------------------------------------------
第三章 匹配一组字符
例子一...匹配多个字符中的某一个
文本:
Hello,my name is Sam.my pet is dog.
正则表达式:
[ea]ll
结果:
匹配个数1,匹配的位置1,匹配的结果字符串是ell
说明:方括号[]里面的多个字符,里面的任意一字符可拿出来,但仅仅是拿出一个,不能两个或以上。
----------------------------------
例子二...利用字符集合区间
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
[ns]a[0-9]\.xls
结果:
匹配个数3,匹配的位置分别是69,78,87
说明:所谓字符区间[0-9]表示[0123456789],然后[A-Z],[a-z],[A-F]你懂的。字符区间的首,尾字符可以是ASCII字符表里的任意字符。
----------------------------------
例子三...取非匹配
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
[ns]a[^0-9]\.xls
结果:
匹配个数1,匹配的位置分别是69
说明:^这个符号表示对字符区间集合进行取非操作,比如[^0-9]表示不是任何数字的字符
-------------------------------------------------------------------------
第四章 使用元字符
例子一...匹配空白字符
文本:
sales1.xlsorders3.xlssales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
正则表达式:
\n\r
结果:
匹配个数0.
如果正则表达式:
\n
结果:
匹配个数8.匹配的位置分别是32,44,55,68,77,86,95,104。
如果正则表达式:
\r
结果:
匹配个数8.匹配的位置分别是31,43,54,67,76,85,94,103。
如果正则表达式:
\r\n
结果:
匹配个数8.匹配的位置分别是31,43,54,67,76,85,94,103。
说明:在Windows操作系统,文本行的结束标签是\r\n。下面是一个空白元字符的对照表
[\b] 回退字符(Backspace键)
\f 换页符
\n 换行符
\r 回车符
\t 制表符(Tab键)
\v 垂直制表符
----------------------------------
例子二...匹配数字(非数字),匹配字母和数字(与非字母和数字),匹配空白字符
说明:
\d等同于[0-9],等同于[0123456789]; \D等同于[^0-9];
\w等同于[a-zA-Z0-9_]就是任何一个大小写字母和数字和下划线;\W等同于[^a-zA-Z0-9_]
\s等同于[\f\n\r\t\v]就是空白字符啦,\S等同于[^\f\n\r\t\v]
----------------------------------
例子三...匹配十六进制或八进制标明的ASCII字符,使用POSIX字符集合
说明:
\x0A等同于ASCII字符10,也就是换行符,也就是\n。这是十六进制。
\011等同于ASCII字符9,也就是制表符。这事八进制。
对于POSIX字符集合,只不过是[0-9][a-z]等等的另一种表达方式,Javascript和.NET的正则不支持。
-------------------------------------------------------------------------
第五章 重复匹配
例子一...匹配一个或多个字符
文本:
My Email is ttt@ccc.com.It is a good Email!
正则表达式:
\w+@\w+\.\w+
结果:
匹配个数1,匹配的位置是12
说明:+表示匹配一个或多个字符(至少一个,不匹配零个字符的情况)
文本:
My Email is rrr.ttt@ccc.com.It is a good Email!
正则表达式:
\w+@\w+\.\w+
结果:
匹配个数1,匹配到的字符串是ttt@ccc.com
如果正则表达式:
[\w.]+@\w+\.\w+
结果:
匹配个数1,匹配到的字符串是rrr.ttt@ccc.com
说明:我们没有对字符集合[\w.]里面的.字符进行转义,但最后还是匹配出来。一般来说,在[]里面的元字符.和+都被解释为普通字符,不需转义。当然,转义了也没坏处。
----------------------------------
例子二...匹配零个或多个字符
文本:
Hello .god@hotmail.com is my Email!
正则表达式:
[\w.]+@\w+\.\w+
结果:
匹配到的字符串是.god@hotmail.com
如果正则表达式:
\w+[\w.]*@\w+\.\w+
结果:
匹配到的字符串是god@hotmail.com
说明:*这个符号表示匹配零个或多个字符,也就是表示可有可无的意思。
文本:
Hello .god.@hotmail.com is my Email!
正则表达式:
\w+[\w.]*@\w+\.\w+
结果:
匹配到的字符串是god.@hotmail.com
如果正则表达式:
\w+[\w.]*\w@\w+\.\w+
结果:
没有匹配字符串
----------------------------------
例子三...匹配零个或一个字符
文本:
The URL is http://www.g.cn,to connect securely use https://www.g.cn/ instead
正则表达式:
http://[\w./]+
结果:
匹配个数为1,匹配到的字符串是http://www.g.cn
如果正则表达式:
https?://[\w./]+
结果:
匹配个数为2,匹配到的字符串分别是http://www.g.cn和https://www.g.cn/
说明:?这个符号表示的是,我前面的字符要么不出现,要么最多出现一次。
----------------------------------
例子四...设定确定匹配次数,至少匹配几次,匹配几次到几次
文本:
The URL is http://www.g.cn,to connect securely ww
正则表达式:
w{3}
结果:
匹配个数为1,匹配到的字符串是www。
The URL is http://www.g.cn,to connect securely ww
正则表达式:
w{3}
结果:
匹配个数为1,匹配到的字符串是www。
说明:{3}表示前一个字符必须重复出现三次才算一个匹配 。
如果正则表达式:
w{1,3}
结果:
匹配个数为2,匹配到的字符串是www和ww。
匹配个数为2,匹配到的字符串是www和ww。
说明:{1,3}表示前一个字符出现一次到三次。
如果正则表达式:
w{3,}
结果:
匹配个数为1,匹配到的字符串是www。
匹配个数为1,匹配到的字符串是www。
说明:{3,}表示前一个字符至少出现三次。
----------------------------------
例子五...防止过度匹配
文本:
<b>AI</b> and <b>BI</b>
正则表达式:
<b>.*</b>
结果:
匹配个数为1,匹配到的字符串是<b>AI</b> and <b>BI</b>
说明:如果我们希望匹配的是<b>AI</b>和<b>BI</b>,说明原先匹配被过度了。<b>AI</b> and <b>BI</b>
正则表达式:
<b>.*</b>
结果:
匹配个数为1,匹配到的字符串是<b>AI</b> and <b>BI</b>
如果正则表示:
<b>.*?</b>
结果:匹配个数为2,匹配到的字符串是<b>AI</b>和<b>BI</b>
贪婪元字符*对应懒惰元字符*?
贪婪元字符+对应懒惰元字符+?
贪婪元字符{n,}对应懒惰元字符{n,}?
合乎自然而生生不息。。。


浙公网安备 33010602011771号