*:匹配零个或多个字符
?:匹配零个或一个字符
\b:单词边界
^:匹配字符串的开头
$:匹配一个字符串的结束
(m?)^:不仅匹配一个字符串开头,还匹配换行符后面的开始位置
子表达式:匹配例如 这样的一个整体的字符,如果写成 {2,}将只匹配 ;;;这样的字符,而无法匹配多次重复的
改为:( ){2,}
简化正则表达式模式:
正则表达式中的元字符:
.:任意字符相当于oracle sql中的_
\d:等价于[0-9]
\D:等价于[^0-9]
\w:等价于[a-zA-Z0-9_]
\W:等价于[^a-zA-Z0-9_]
\s:任何一个空白字符(\t\n\r\f\v),等价于[\t\n\r\f\v]
\S:任何一个非空白符,等价于[^\t\n\r\f\v]
\x:十六进制前缀,\x0A表示ascii中的\n
\0:八进制前缀
POSIX字符类是一个很好的工具
eg.
匹配邮箱地址:[\w]+[\w.]*@[\w.]+\.\w+
测试用例:
guorunhe@foxmail.com
10212020.@qq.com
.guorunhe@163.com
g@133.com
guos@baidu.com.
text@text.text.text
匹配url地址:https?://[\w./]+
测试用例:
http://www.baidu.com/
https://www.baidu.com/
测试python中变量命名规范:\b[_a-zA-Z][_\w]*\b
位匹配次数设定一个精确的值:#[[:xdigit:]]{6}
测试用例:
<BODY BGCOLOR='#223322' TEXT='#FFFFFF'
MARGINWIDTH="0" MARGINHEIGHT="0"
TOPMARGIN="0" LEFTMARGIN="0">
匹配次数设定一个区间:{1,2}
测试用例:\d{1,2}[-\/]\d{1,2}[-\/]\d{2,4}
4/8/04
10-6-2013
2/2/2
01-01-01
最少重复多少次:{n,}
测试用例:\$\d{3,}\.\d{2}
$213.23
$4.3
$1234.33
$133.2
$1232.2
只能匹配0或1个字符:<[Bb]>.*?</[Bb]>
<b>efaddf</b><b>slakfjd</b>
匹配javascript代码注释:
(m?)^\s*//.*$
匹配ip:
(1)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
(2)(\d{1,3}\.){3}\d{1,3}
(3)合法的ip地址匹配模式:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
正则表达式练习
北美电话号码,如下两种格式,并且其中中区号和局号第一位不能为0,1:
(555) 555-5555 (区号) 局号-号码 中间有一空格:\([2-9]\d\d\) [2-9]\d\d-\d{4}
555-555-5555 区号-局号-号码:[2-9]\d\d-[2-9]\d\d-\d{4}
两种表示方式的模式如下:
\(?[2-9]\d\d\)?[ -][2-9]\d\d-\d{4}
美国邮政编码,分为ZIP编码和ZIP-4编码:
例:11222,23231-1234
\d{5}(-\d{4})?
中国邮政编码,共6位数字,其中第二位不能为8(港澳前两位位99,其余省市位0-7):
\d(9|[0-7])\d{4}
IP地址:
合法的IP地址应满足下面的模式:
(1)任何一个1或2位的数字
(2)任何一个以1开头的三位数字
(3)任何一个以2开头第二位为0-4的数字
(4)任何一个以25开头最后一位为0-5的数字
由上述模式写出正则表达式:
(((\d{1,2})|(1/d{2})|(2[0-4]/d)|(25[0-5]))\.){3}((\d{1,2})|(1/d{2})|(2[0-4]/d)|(25[0-5]))
URL地址解析,URL地址包括以下内容:协议名,主机名,可选端口,文件路径,有时还有嵌在URL里的“username:password”:
https?://(\w*:\w*@)?[-\w.]+(:\d+)?(/([\w/+.]*(\?\S+)?)?)?