今天刚刚学习了正则表达式,总结了一下,来和大家一块分享。
常用的元字符
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
转义字符
一般字符:除.$^{}[](|)*+?\外,其他字符与自身匹配
\a:与响铃匹配
\t: 与Tab符匹配
\r:与回车符匹配
\v:与垂直符匹配
\f:与换页符匹配
\n:与换行符匹配
\e:与Esc符匹配
\:在后面带有不识别为转义符字符时,与该字符匹配
重复
*:重复零次或更多次
+:重复一次或更多次
?:重复零次或一次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n到m次
字符类
[abcde]: 匹配a,b,c,d,e中的任意一个字符
[0-9]含意与\d相同,匹配任一数字
[a-z0-9A-Z_]含意与\w相同,匹配数字,字母,下划线
分支条件
分支条件指的是有几种规则,如果满足其中任一一种规则,都应该当成匹配,具体方法是用 | 把不同的规则分隔开。
分组:
单个字符的重复可以用限定符来实现,比如\d?是一个整数出现一次或不出现;而一组字符也是可以重复出现的,只要把这组字符加上圆括号就可以啦,比如(\d{3}.)?,表示一个三位数整数和一个逗点出现零次或一次。
例子:正确IP地址的验证
"^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d25[0-5])$)"
说明:IP地址是0到255每个段,前三节数字后都有一个“.”所以可以分组。这个三个数字中,百位只能是0,1,2,当是0或1时,十位,个位什么数字都可以,当百位为2时,十位不能超过5,当十为5时,个位不能超过5,所以可以这样分组,当百位为0和1时分一组,当百位为2时,十位为5时分一组,当百位为2,十位为0到4时,个位什么都可以分一组,共三组。
反义
\W:匹配任意不是字母,数字,下划线,汉字的字符
\S :匹配任意不是空白符的字符
\D:匹配任意非数字的字符
\B:匹配不是单词开头或结束的位置
[^x]:匹配除了x以外的任意字符
[^aeiou]:匹配除了aeiou这几个字母以外的任意字符
以下是常用的:
正则表达式,匹配中文字符、手机号、Email地址、网址URL、HTML标记、国内电...
常用正则表达式,匹配中文字符、Email地址、网址URL、HTML标记、国内电话号码、邮政编码和ip地址等等
最新手机号:
^(13\d|15\d|18[8|9])\d{8}$

只含有汉字、数字、字母、下划线,下划线位置不限:
^[a-zA-Z0-9_\u4e00-\u9fa5]+$
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:[a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:((0\d{2})|(\(0\d{2}\))-\d{8})|((0\d{3})|(\(0\d{3}\))-\d{7|8})
评注:匹配形式如 0511-4405222 或 (021)-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配×××:([1-9]\d{9}((0[1-9])|(1[0-2]))((0[1-9])|([12][0-9])|(3[01]))\d{3}[0-9x])|\d{15}
评注:中国的×××为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串