正则表达式基本语法
一、核心作用:
–文本的复杂处理
二、正则表达式的定义:
描述一个规则,通过这个规则可以匹配一类字符串
三、正则表达式的优势和用途:
优势:强大而灵活的文本处理工具
用途:大部分编程语言、数据库、文本编辑器、开发环境均支持正则表达式
四、测试工具:
RegexBuddy
五、正则表达式语法:
正则表达式语法(1):
转义字符:‘
\n | 换行符 |
---|---|
\ | 代表\本身 |
\t | 制表符 |
^、+、? | 代表这些字符本身 |
正则表达式语法(2):
标准字符集合
区分大小写,大写意思相反
\d | 任意一个数字(0-9) |
---|---|
\w | 任意一个字母、数字、下划线(A-Z、a-z、0-9、_) |
\s | 包括空格、制表符、换行符等空白字符中的任意一个(\t、\n、 ) |
. | 小数点可以匹配任意一个字符(除换行符)如果要匹配包括换行符载内的所有字符,一般使用[\s\S] |
正则表达式语法(3):
自定义字符集合
[] | 方括号匹配方式,能够匹配方括号中任意一个字符 |
---|---|
[1234] | 匹配1或2或3或4 |
[^123] | 匹配除1、2、3之外的任意字符 |
[1-3] | 匹配1-3之间的任意一个字符 |
[^A-F0-3]] | 匹配除A-F、0-3之外的任意一个字符 |
注:(1)正则表达式的特殊符号,被包含到中括号中,则失去了特殊意义,除了 ^和-之外
(2)标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包含该集合
正则表达式语法(4):
量词
修饰匹配次数的特殊符号
{n} | 表达式重复n次 |
---|---|
{m,n} | 表达式至少重复m次,最多重复n次 |
{m,} | 表达式至少重复m次 |
? | 匹配表达式0次或者一次,相当于{0,1} |
+ | 表达式至少出现一次,相当于{1,} |
* | 表达式不出现或者出现任意次,相当于{0,} |
匹配次数中的贪婪模式(匹配字符越多越好,默认) 匹配次数中的非贪婪模式(匹配字符越少越好,修饰匹配次数的特殊符号后加一个?修饰)
正则表达式语法(5):
字符边界
匹配的不是字符而是位置,符合某种条件的位置
^ | 与字符串开始的位置匹配 |
---|---|
$ | 与字符串结束的位置匹配 |
\b | 匹配一个单词边界 |
\b匹配这样一个位置:前面的字符和后面的字符不全是\w
正则表达式语法(6):
选择符和分组
|分支结构 | 左右两边表达式“或”关系,匹配左边或右边 |
---|---|
()捕获组 | (1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 (2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 (3)每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的问题 |
(?:)非捕获组 | 一些表达式中,不得不使用(),但又不需要保存()中子表达式匹配的内容,这时可以用非捕获组来抵消使用()带来的副作用 |
反向引用(\nnn) 每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始编号 通过反向引用,可以对分组已捕获的字符串进行引用
正则表达式语法(7):
预搜索(零宽断言)
只进行子表达式的匹配,匹配内容不计入最终匹配结果,是零宽度
这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符,是位置绝对的
正则表达式匹配过程中,如果子表达式是占有字符的;如果子表达式匹配的仅仅是位置,那么就认为这个子表达式是占有字符的,如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还说零宽度,是针对匹配的内容是否保存到最终匹配结果中而言的
(?=exp) | 断言自身出现的位置后面能匹配到exp |
---|---|
(!=exp) | 断言自身出现的位置后面不能匹配到exp |
(?<=exp) | 断言自身出现的位置前面能匹配到exp |
(?<!exp) | 断言自身出现的位置前面不能匹配到exp |
六、正则表达式练习:
电话号码的验证:
要求:
- 电话号码由数字和"-"构成
- 电话号码为7到8位
- 如果电话号码中包含有区号,那么区号为三位或四位, 首位是0.
- 区号用"-"和其他部分隔开
- 移动电话号码为11位
- 11位移动电话号码的第一位和第二位为"13“,”15”,”18
0\d{2,3}-\d{7,8}|1[35789]+\d{9}
电子邮件地址验证 :
要求’’
- 用户名:字母、数字、中划线、下划线组成。
- @
- 网址:字母、数字组成。
- 小数点:.
- 组织域名:2-4位字母组成。 – 不区分大小
\[email protected][a-zA-z0-9]+(.[A-Za-z]{2,4}){1,2}