虽说正则表达式在我们真正的项目开发过程中,大多数都是直接去查资料,但是对于一些正则表达式的基础知识还是十分有必要了解的。比如读懂一个正则表达式,还有面试的时候很可能会被问到。
1 学习教程
(1)学习网站:http://www.runoob.com/regexp/regexp-tutorial.html
(2)教程什么的看的太烦了,而且还有些东西并不是很实用,下面花10分钟就可以掌握实用的、基础的正则表达式了。当然,这些东西都只是了解,快速入门,实用就行,会写简单的正则表达式,能够看得懂正则表达式就够了。
2 请把下面的符号表达的意思记住
* 表示前一个表达式可以出现0、1、多次
+ 表示前一个表达式可以出现1、多次
? 表示前一个表达式可以出现0、1次
^ 表示是否以指定字符串开头,如果在[]前面使用,表示不接受该字符集合
$ 表示是否以指定字符串结尾
| 表示两者间的选择
. 匹配除换行(\n)外的任意一个字符
{n}表示前一个表达式出现确定的 n 次
{n,}表示前一个表达式至少出现n 次
{n,m}最少出现 n 次且最多出现 m 次
注:以上n和m都是非负整数
注:表达式可以是小括号括起来的式子,也可以是单个字符
3 好了,是不是感觉很简单,下面以实例来讲解
(1)实例一: ^once
分析:^的意思是,以某个指定的字符串开头,所以上面正则表达式的意思是:匹配以once开头的字符串
(2)实例二, ^a{2,4}$
分析:以a开头,最少2个a,最多3个a,以a结尾。所以它能匹配的字符串是aa aaa aaaa
(3)补充: - 表示字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
(4)补充: \d 表示匹配任意一个数字。
(5)实例三,来个复杂的:
验证如下手机号码:
移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
联通号码段:130、131、132、136、185、186、145
电信号码段:133、153、180、189
表达式如下:
^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$
(ps:以上表达式来源:http://www.jb51.net/article/96201.htm)
分析:把子表示式分解出来
^( #表示以某某开头
(13[0-9]) #130到139
| #或者
(14[5|7]) #145或147
|
(15([0-3]|[5-9])) #150到153 或者 155到159
|
(18[0,5-9]) #180,185到189
)
\\d{8}$ #匹配任意8个数字,且以数字结尾