正则匹配方式多种多样,学会了具体的判断规则,写起来就容易多了。
分类:锚字符、元字符 表达式
锚字符:
^、\A、$、\Z、\B、\b
元字符:
.、\w、\W、\s、\S、\d、\D
脱字符:
[^xxx]
说明:
\d ----》匹配任意数字
\w --》匹配任意数字和字母
\D ----》数字之外的字符匹配
\s --》匹配任意空白符
\S ---》匹配任意非空白符
\A ---》字符串的匹配 单行匹配,对于换行没有效果
$ ---》行尾匹配,以某个字符结尾
\Z ---》与$相反
\b --》边界匹配 \b也属于转义符 需要特殊处理
\B ---》非单词的边界匹配
多字符匹配:
x? ---》匹配1个多0个
x* --》匹配0个或无数个
.* --》平常所使用的任意字符匹配
x+ --》至少匹配1个
x{n} --》匹配指定的n个
x{n,} --》匹配至少n个,若多于n个全部匹配
x{n,m} --》匹配至少n个,最多m个
x|y ---》匹配x或y
基本字符都在上面了,需要匹配什么样的数据,只需要适当的组合就行了,不明白的可以对照上面的说明,参考一个写好的正则表达式进行推敲即可,常见的正则匹配类型如下:
电话号码匹配(电话和手机):
'/^([1]\d{10}|([\((]?0[0-9]{2,3}[)\)]?[-]?)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?)$/'
网址匹配:
^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\/\+&%\$#\=~_\-@]*)*$
邮箱匹配:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
图片匹配(爬虫居多):
s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
身份证匹配:
/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
其实各门语言的用法都是大同小异的,就是一个语法的差异问题,好多人问在js里面怎么用,在java里面怎么不能用,在PHP里面怎么用等等,不仅仅是一个正则,好多东西都是如此,参加过培训的0基础出身的小朋友更应该深有体会,学了一门语言,上班也不短了,好像自己知道的来来回回就那么点东西,稍微变变就不会了,万变不离其宗,面向过程也好,面向对象也罢,学习一门新的语言,你不能简单的知道敲一个fuc之后编辑器直接将function方法完全暴露,这是方便,这也是坑,或许你只知道func里面传什么,至于为什么这么传,它代表的意义是什么,传出去之后,数据在堆栈里面是如何进出的,你可能不知道,把这些稍微偏底层的东西搞一搞,你会更上一个台阶