学习笔记——正则表达式
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
?