JavaEye挂了。。设计模式的学习有些停滞,正好把想看的正则表达式看了
正则表达式主要作用是用来描述字符串对象的,还可以用来匹配字符串(我感觉最多的就是各种验证,查找替换中的实际应用)
正则表达式语法:
● 字符与字符串
直接用字母和数字 /a/ /b/ /abc/ /123/
还有反斜杠加特殊字符 \n \t \( \o等等
● 字符类
[…] 可以匹配一个字符 [abc] [a-z] [A-Z]等等 只能匹配一个
[^…] 除去特定字符 [^abc] [^a-z]等等
特别的有
. 除换行,终止符之外的所有字符
\w 所有ASCII单字字符 (注意小写 大写是除所有外 相当于^)
\d 数字
\s 空白符
● 重复类 限定符
指定字符要重复的次数
{n} {n,m} {n,} 相当于一个范围 重复n次 n-m次 至少n次
特别的
? 0或1次 相当于{0,1}
+ 至少1次 相当于{1,}
0或多次 {0,}
● 选择符
| abc|asd|qaz 注意从左到右只会匹配第一个
● 定位符
^ 表示开头
$ 表示结尾
还有一些\b \B (?=p) (?!p)
● 分组
(…) (?...) 将一个字符串看做整体分组 后者不记忆与该组合所匹配的内容 其他无异 配合限定符使用
● 引用
\n 表示第n个分组 比如\1 \2
/[‘”][^’”]*[‘”]/表示一个字符串 但是它包含了’开头”结尾或者”开头’结尾的
而/[‘”][^’”]*\1/则解决了该问题
所以引用不是单纯复制匹配模式,而是重复内容
● 标志
i 不区分大小写
g 全局模式 不是找到一个就结束
m 多行匹配模式
用得比较多的i和g 用法是加在表达式后 如/abc/i /abc/gi /abc$/m
以上都是语法,下面记录点例子
●邮编:
首先都是数字 可以用\d
然后是6位 所以是\d{6} 但是这样也会同123456789这些大于6位的匹配
所以加上限定符^\d{6}$
● 身份证号码(18位):
前17位是数字 \d{17}
后1位是数字或X [\d|X]
同样加上限定符^\d{17}[\d|X]$
● 验证Email地址:
用户名部分 由字母,数字,下划线等组成 [\w-_]+
@部分 @
域名部分 可以用.作为分隔符,除最后一部分,都由字母,下划线等组成
[\w-]+\.表示有.的部分 [\w-]+表示只含字母的部分
完整的就是([\w-]+\.)+[\w-]+
最终 Email验证的正则表达式 ^[w-_]+@([\w-]+\.)+[\w-]+$
补充上来一个常用正则表达式
http://flytosea.iteye.com/blog/763908
韩神推荐的正则教程 http://deerchao.net/tutorials/regex/regex.htm#lookaround