/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/ 谁能帮我具体解释下这个正则表达式的含义呢
/^(13[0-9]|15[0-9]|18[0-9]|14[0-9])\d{8}$/ 还有这个也帮忙解释下,??
^([a-zA-Z0-9-])+@([a-zA-Z0-9-])+(.[a-zA-Z0-9_-])+
^ 表示开头.
([a-zA-Z0-9-])+ a-z A-Z 0-9 的字符和下划线,横线- (实际上这里不用加圆括号)
+ 表示这样的字符有 一个或n个(也就是大小写字母数字下划线横线有1个或n个
@ 就是@符号..表示接下来是个@符号
([a-zA-Z0-9_-])+ 然后又是大小写字母数字下划线横线有1个或n个
.表示小数点 .
.[a-zA-Z0-9_-] 匹配 小数点后边跟 大小写字母数字下划线横线,这里有个小错误就是没有指定重复次数所以只能匹配一个字符,比如 123@qq.com 只能匹配到 123@qq.c
(.[a-zA-Z0-9_-])+ 这里表示可以有1次或n次重复的情况 比如 123@qq.a.b.c
修改正确:
^([a-zA-Z0-9-])+@([a-zA-Z0-9-])+(.[a-zA-Z0-9_-]+)+
\w相当于[a-zA-Z0-9] 所以可以简写一下 ^[\w-]+@[\w-]+(.[\w_-]+)+
^(13[0-9]|15[0-9]|18[0-9]|14[0-9])\d{8}$
这个是开头三位数字 13n 或 15n 或 18n 或 14n,其中n取值是0~9
\d{8} 表示 8个数字.
可以简化一下..
^1(3|5|8|4)\d{9}$
+++++++++++++++++++++++++++++++
正则表达式
又称规则表达式包括四个部分,定界符、元字符、量词、模式修正符。
1.定界符:即//; $reg = ‘//’;在定界符中编写相应的规则。
2.元字符:即筛选规则的主要部分,可以填写原字符进行筛选,如用
$reg = ‘/a/’;筛选出a。也可以用以下转义字符,来表示一定的范围。
\w 小写w表示筛选的内容就是字母、数字、下划线范围中的任意一个
\W 与小写w相反。
\d表示数字(0-9)范围中的任意一个
\D表示数字范围之外(除了数字之外的)任意一个
\s ,表示一个空格
\S,除了空格之外的任意一个字符
\b,boundary,国界线,在正则表达式中表示单词之间的边界
\B,表示除了字符边界线之外的任意一个字符
[]中括号,表示范围中的一个如[a-z]
. ,英文的点号,表示除了换行符(
)之外的任意一个字符
| 表示或者
\x{4e00} - \x{9fa5}表示中文的范围ACSII码 注意需要在正则表达式之后加上/u模式符,使其转换为utf8国际编码。
3.量词
*:表示0个或多个
+:表示至少1个
?:表示0个或1个
注意
?比较特殊,如果?放在元字符后面,表示量词,也就是匹配的数量,如果?放在量词后面,也是将贪婪模式转换成懒惰模式的意思
^ $,^表示开始的位置,$表示结束的位置
4.模式修正符
书写在正则表达式的最后
即$reg = ‘//i’;
1.i –即ignore 即忽视大小写
2.U –将默认的贪婪模式转换为懒惰模式,即读取一个就停止
贪婪模式是尽可能多的读。
3.u,采用utf-8编码对字符进行转码
4.s,表示万能点模式,默认情况下,.英文点号匹配除了换行符
之外的任意字符,采用万能点模式之后,英文点号匹配任意的字符包括
换行
5./m,multi 多行模式(了解即可)多行模式,就是将换行的地方看做是一个新的字符串
正则表达式的一些要点:
捕获与分组通过小括号进行捕获与分组,在匹配后的数组中将分组返回,下标为0的返回原匹配字符,第一个下标返回第一个()中的内容,以此类推。
(?exp)匹配exp,并捕获文本到名称为name的组里
(?:exp) 匹配exp,不捕获匹配的文本
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
如helloworld
第一个(?< name>world)匹配world存入name键中
(?:world)筛选匹配字段,helloworld,但不单独分组。
(?=world)即hello并分组
(?<=world)相反
以上都应有PHP函数preg_match()或preg_match_all()进行匹配
reg即规则str 即要筛选的字符串
$match 筛选后的结果
两个函数,前者筛选出一个就停止,后者筛选全局。
下面是一些常用的正则表达式在这里分享给大家
中文(utf8)
[<span class="hljs-attribute">u4e00-<span class="hljs-attribute">u9fa5] //通用
[<span class="hljs-attribute">x{4e00}-<span class="hljs-attribute">x{9fa5}] // PHP
1
2
url:
((http|https|ftp|telnet|news)://)?([a-z0-9_<span class="hljs-attribute">-/<span class="hljs-attribute">.]+<span class="hljs-attribute">.[][a-z0-9:;&#@=_~%?</span>/<span class="hljs-attribute">.,+<span class="hljs-attribute">-]+)
^(([a-zA-Z]+)(://))?([a-zA-Z]+)<span class="hljs-attribute">.(<span class="hljs-attribute">w+)<span class="hljs-attribute">.([<span class="hljs-attribute">w.]+)(/([<span class="hljs-attribute">w]+)/?)(/[a-zA-Z0-9]+<span class="hljs-attribute">.(<span class="hljs-attribute">w+))(/([<span class="hljs-attribute">w]+)/?)(?(<span class="hljs-attribute">w+=?[\w]))((&?\w+=?[\w]))*$
1
2
email:
<span class="hljs-attribute">w+([-+.]<span class="hljs-attribute">w+)@<span class="hljs-attribute">w+([-.]<span class="hljs-attribute">w+)<span class="hljs-attribute">.<span class="hljs-attribute">w+([-.]<span class="hljs-attribute">w+)*
^[a-zA-Z0-9][a-zA-Z0-9._-]*@[a-zA-Z0-9]+<span class="hljs-attribute">.[a-zA-Z0-9<span class="hljs-attribute">.]+$
1
2
电话:
<span class="hljs-attribute">d{3}-<span class="hljs-attribute">d{8}|<span class="hljs-attribute">d{4}-<span class="hljs-attribute">d{7}
^(((010)|(021)|(0<span class="hljs-attribute">d3,4))( ?)([0-9]{7,8}))|((010|021|0<span class="hljs-attribute">d{3,4}))([- ]{1,2})([0-9]{7,8})$
1
2
手机:
^((13[0-9])|147|(15[0-35-9])|180|182|(18[5-9]))[0-9]{8}$
1
qq:
[1-9][0-9]{4,}
1
邮编:
^[1-9]<span class="hljs-attribute">d{5}$
1
身份证:
<span class="hljs-attribute">d{15}|<span class="hljs-attribute">d{18}
^(([0-9]{15})|([0-9]{18})|([0-9]{17}x))$
1
2
IP:
^((([1-9])|((0[1-9])|([1-9][0-9]))|((00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))))<span class="hljs-attribute">.)((([0-9]{1,2})|(([0-1][0-9]{2})|(2[0-4][0-9])|(25[0-5])))<span class="hljs-attribute">.){2}(([1-9])|((0[1-9])|([1-9][0-9]))|(00[1-9])|(0[1-9][0-9])|((1[0-9]{2})|(2[0-4][0-9])|(25[0-5])))$
1
时间:时分秒
^(([1-2][0-9]{3}-)((([1-9])|(0[1-9])|(1[0-2]))-)((([1-9])|(0[1-9])|([1-2][0-9])|(3[0-1]))))( ((([0-9])|(([0-1][0-9])|(2[0-3]))):(([0-9])|([0-5][0-9]))(:(([0-9])|([0-5][0-9])))?))?$
1
HTML:
制表符,换行符,回车符
[<span class="hljs-attribute">t<span class="hljs-attribute">n<span class="hljs-attribute">r]+
1
html标签:
<([<span class="hljs-attribute">w-]+?)[^>]>.?</\1>|<[\w-]+?[^>]*/>
1
script:
<script.*?</script>
1
连接:
/<a .?href="(.?)".?>/is
1
1 数字:^[0-9]*$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]*)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
12 非零的负整数:^-[1-9][]0-9"$ 或 ^-[1-9]\d$
13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
16 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$
17 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
18 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$
20 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
21 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
22强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$

BlogPost5 min read
正则的一些例子
Written on 2017.09.11