超详细正则表达式讲解
正则表达式正则表达式基础基础(Regular Expression)
正则表达式简介
n 为什么需要正则表达式?
q ⽂本的复杂处理。
n 正则表达式的优势和⽤途?
q ⼀种强⼤⽽灵活的⽂本处理⼯具;
q 提供了⼀种紧凑的、动态的⽅式,能够以⼀种完全通⽤的⽅式来解决各种字符串处理(例如:验证、查、替换等)问题;q ⼤部分语⾔、数据库都⽀持正则表达式。
n 正则表达式定义:
q 正如他的名字⼀样是描述了⼀个规则,通过这个规则可以匹配⼀类字符串。
n 正则表达式的⽤处:
q 验证给定字符串是否符合指定特征,⽐如验证是否是合法的邮件地址。
正则化判别分析q ⽤来查字符串,从⼀个长的⽂本中查符合指定特征的字符串。
q ⽤来替换,⽐普通的替换更强⼤
⼯具软件RegexBuddy 的使⽤
n 为了提⾼开发效率,⼀般都先在⼯具软件中测试正则表达式,通过测试后,才在程序中使⽤。
正则表达式规则
n 普通字符
q 字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配⼀个字符串的时候,匹配与之相同的⼀个字符。
n 简单的转义字符
\n
代表换⾏符\t
制表符\\
代表\本⾝\^ ,\$,\.,\(, \) , \{, \} , \? , \+ , \* , \| ,\[, \]
匹配这些字符本⾝
n 标准字符集合:能够与 ‘多种字符’ 匹配的表达式
q (注意区分⼤⼩写,⼤写是相反的意思)
\d
任意⼀个数字,0~9 中的任意⼀个 \w
任意⼀个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意⼀个 \s
包括空格、制表符、换⾏符等空⽩字符的其中任意⼀个 .
⼩数点可以匹配除了换⾏符(\n )以外的任意⼀个字符
n ⾃定义字符集合:[ ]⽅括号匹配⽅式,能够匹配⽅括号中任意⼀个字符
[ab5@]
匹配 "a" 或 "b" 或 "5" 或 "@"[^abc]
匹配 "a","b","c" 之外的任意⼀个字符 [f-k]
匹配 "f"~"k" 之间的任意⼀个字母 [^A-F0-3]匹配 "A"~"F","0"~"3" 之外的任意⼀个字符
注意事项:
1. 正则表达式中的特殊符号,如果被包含于中括号中,则失去特殊意义,但 \ [ ] : ^ - 除外。
2. 标准字符集合,除⼩数点(.)外,如果被包含于中括号中,⾃定义字符集合将包含该集合。
⽐如:[\d.\-+],将可以匹配数字,⼩数点和 + - 符号。(⼩数点和 + 号失去特殊意义)
n 修饰匹配次数的特殊符号
{n}表达式重复n次
{m,n}表达式⾄少重复m次,最多重复n次
{m,}表达式⾄少重复m次
匹配表达式0次或者1次,相当于 {0,1}
+表达式⾄少出现1次,相当于 {1,}
*表达式不出现或出现任意次,相当于 {0,}
n 匹配次数中的贪婪模式(匹配字符越多越好)
q “{m,n}”, “{m,}”, “?”, “*”, “+”,具体匹配的次数随被匹配的字符串⽽定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。
n 匹配次数中的⾮贪婪模式(匹配字符越少越好)
q 在修饰匹配次数的特殊符号后再加上⼀个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。
n 字符边界(本组标记匹配的不是字符⽽是位置,符合某种条件的位置)
^与字符串开始的地⽅匹配
$与字符串结束的地⽅匹配
\b匹配⼀个单词边界
n 选择符和分组
表达式作⽤
|左右两边表达式之间 "或" 关系,匹配左边或者右边
( )(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
(3). 每⼀对括号会分配⼀个编号,使⽤ () 的捕获根据左括号的顺序从 1
开始⾃动编号。捕获元素编号为零的第⼀个捕获是由整个正则表达式模
式匹配的⽂本
n 反向引⽤(\nnn)
q 每⼀对()会分配⼀个编号,使⽤ () 的捕获根据左括号的顺序从 1 开始⾃动编号。
q 通过反向引⽤,可以对分组已捕获的字符串进⾏引⽤。
n ⾮捕获组(?:xxx)
q 与捕获组的区别在于不捕获匹配的⽂本,仅仅作为分组。其他地⽅⼀致。
n 模式修改符 (?ismg)*****(?-ismg) (⽤的不多,听听就⾏!)
q 在正则表达式中间,对匹配模式进⾏修改。
⼤⼩写模式修改,⽐如匹配a,A:
1. [aA]
2. 把整个模式修改为⼤⼩写不敏感。
3. (?i)a(?-i)
n 预搜索(零宽断⾔)
q 判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。(?=exp)断⾔⾃⾝出现的位置的后⾯能匹配表达式exp
(?<=exp)断⾔⾃⾝出现的位置的前⾯能匹配表达式exp
(?!exp)断⾔此位置的后⾯不能匹配表达式exp
(?<!exp)断⾔此位置的前⾯不能匹配表达式exp
正则表达式的匹配模式
n IGNORECASE 忽略⼤⼩写模式
q 匹配时忽略⼤⼩写。
q 默认情况下,正则表达式是要区分⼤⼩写的。
n SINGLELINE 单⾏模式
q 整个⽂本看作⼀个字符串,只有⼀个开头,⼀个结尾。
q 使⼩数点 "." 可以匹配包含换⾏符(\n)在内的任意字符。
n MULTILINE 多⾏模式
q 每⾏都是⼀个字符串,都有开头和结尾。
q 在指定了 MULTILINE 之后,如果需要仅匹配字符串开始和结束位置,可以使⽤ \A 和 \Z
开发中使⽤正则表达式的流程
1. 分析所要匹配的数据,写出测试⽤的典型数据
2. 在⼯具软件中进⾏匹配测试
3. 在程序中调⽤通过测试的正则表达式
课堂练习
n 电话号码验证
q (1)电话号码由数字和"-"构成
q (2)电话号码为7到8位
q (3)如果电话号码中包含有区号,那么区号为三位或四位, ⾸位是0.
q (4)区号⽤"-"和其他部分隔开
q (5)移动电话号码为11位
q (6)11位移动电话号码的第⼀位和第⼆位为"13“,”15”,”18”
n 电⼦邮件地址验证
1.⽤户名:字母、数字、中划线、下划线组成。
2.@
3.⽹址:字母、数字组成。
4. ⼩数点:.
5. 组织域名:2-4位字母组成。
6.不区分⼤⼩写。
[a-zA-Z0-9_\-]
使⽤模式修改符:(?i)[a-z0-9_\-]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论