正则表达式
正则表达式一般用于文本的复杂处理。正如他的名字一样是描述了一个规则,通过这个规则可以匹配一类字符串。
正则表达式语法(1)
普通字符– 字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
简单的转义字符
\n 代表换行符
\t 制表符
\\ 代表\本身
\^ ,\$,\.,\(, \) , \{, \} , \? , \+ , \* ,\| ,\[, \] 匹配这些字符本身
正则表达式语法(2)
标准字符集合:
– 能够与 ‘多种字符’ 匹配的表达式
– 注意区分大小写,大写是相反的意思
\d 任意一个数字,0~9 中的任意一个
\w 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个
\s 包括空格、制表符、换行符等空白字符的其中任意一个
. 小数点可以匹配任意一个字符(除了换行符)如果要匹配包括“\n”在内的所有字符,一般用[\s\S]
正则表达式语法(3)
自定义字符集合:
[ ]方括号匹配方式,能够匹配方括号中任意一个字符
[ab5@] 匹配 "a" 或 "b" 或 "5" 或 "@"
[^ abc] 匹配 "a","b","c" 之外的任意一个字符
[f-k] 匹配 "f"~"k" 之间的任意一个字母
[^A-F0-3] 匹配 "A"~"F","0"~"3" 之外的任意一个字符
正则表达式的特殊符号,被包含到中括号中,则失去特殊意义,除了^,-之外。
标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包含该集合。比如:• [\d.\-+]将匹配:数字、小数点、+、-
正则表达式语法(4)
量词(Quantifier)
– 修饰匹配次数的特殊符号
{n} 表达式重复n次
{m,n} 表达式至少重复m次,最多重复n次
{m,} 表达式至少重复m次
? 匹配表达式0次或者1次,相当于 {0,1}
+ 表达式至少出现1次,相当于 {1,}
* 表达式不出现或出现任意次,相当于 {0,}
正则表达式语法(5)
字符边界(本组标记匹配的不是字符而是位置,符合某种条件的位置)
^ 与字符串开始的地方匹配
$ 与字符串结束的地方匹配
\b 匹配一个单词边界
\b匹配这样一个位置:前面的字符和后面的字符不全是\w
正则表达式的匹配模式
IGNORECASE 忽略大小写模式
– 匹配时忽略大小写。
– 默认情况下,正则表达式是要区分大小写的。
SINGLELINE 单行模式
– 整个文本看作一个字符串,只有一个开头,一个结尾。
– 使小数点 "." 可以匹配包含换行符(\n)在内的任意字符。
MULTILINE 多行模式
– 每行都是一个字符串,都有开头和结尾。
– 在指定了 MULTILINE 之后,如果需要仅匹配字符串开始和结束位置,可以使用 \A 和 \Z
正则表达式语法(6)
选择符和分组
| 分支结构左右两边表达式之间 "或" 关系,匹配左边或者右边
( )捕获组 (1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
(3). 每一对括号会分配一个编号,使用 () 的捕获根据左括号的顺序从 1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本
(?:Expression)
非捕获组 一些表达式中,不得不使用( ),但又不需要保存( )中子表达式匹
配的内容,这时可以用非捕获组来抵消使用( )带来的副作用。
练习
电话号码验证
– (1)电话号码由数字和"-"构成
– (2)电话号码为7到8位
– (3)如果电话号码中包含有区号,那么区号为三位或四位, 首位是0.
– (4)区号用"-"和其他部分隔开
– (5)移动电话号码为11位
– (6)11位移动电话号码的第一位和第二位为"13“,”15”,”18”
答案:(0\d{2,3}-\d{7,9})|(1[358]\d{9})
电子邮件地址验证
– 1.用户名:字母、数字、中划线、下划线组成。
– 2.@
– 3.网址:字母、数字组成。
– 4. 小数点:.
– 5. 组织域名:2-4位字母组成。
– 不区分大小写
答案:[\w-]+@[a-z0-9A-Z]+(\.[A-Za-z]{2,4}){1,2}
常用正则表达式列表
匹配中文字符 [\u4e00-\u9fa5]
匹配空白行 \n\s*\r
匹配HTML标记 <(\S*?)[^>]*>.*?</\1>|<.*? />
匹配首尾空白字符 ^\s*|\s*$
匹配Email地址 \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL [a-zA-z]+://[^\s]*
匹配国内电话号码 \d{3}-\d{8}|\d{4}-\d{7}
匹配腾讯QQ号 [1-9][0-9]{4,}
匹配中国邮政编码 [1-9]\d{5}(?!\d)
匹配身份证 \d{15}|\d{18}
匹配ip地址 \d+\.\d+\.\d+\.\d+