经常碰见正则表达式,每次用的时候就去百度,但总有些特殊格式需要配置,因此,抽空看了一下 《精通正则表达式》,记录 一下浅显的理解
简介
先看看《精通正则表达式》中的定义。
正则表达式(Regular Expresssion)是强大、便携、高效的文本处理工具。正则表达式本身加上如同一门袖珍语言的通用模式表示法(general pattern notation),赋予使用者描述和分析文本的能力。配合上特定工具提供的额外支持,正则表达式能够添加、删除、分离、叠加、插入和修整各种类型的文本和数据。
正则表达式是处理数据或文本的一种处理工具。举个例子来说,我们需要在window系统下某个目录中搜索所有的后缀为.txt的文件,我们通常搜*.txt,这样会将目录下所有的.txt文件列出来。这个*便是目录查找用到的通配符,正则表达式和这个类似,但比这个更加强大。
基本语法
语言组成
正则表达式是由元字符和普通字符组成
字符组:[ ] 一对中括号,可以限定范围,某些元字符只有在字符组内才起作用,后面举例用法
元字符
元字符 ,是指有特定意义的字符 需注意在中括号表示的字符组[]内和外有不同意义
符号 | 作用 |
---|---|
^ | 匹配文本的开始,后面紧跟的字符应在匹配值首位 |
$ | 匹配文本的结束,前面紧跟的字符应在匹配值末尾 |
. | 匹配任意字符 |
[ ] | 字符组,限定取值范围 |
[^…] | 排除任意字符(非),^在字符组内部指非、排除的意思 |
- | 连字符,在字符组内部两个字符之间起效 如[1-6] 指匹配数字1-6 的任意值 |
| | 或,条件分支作用,前后条件满足一即可 |
() | 限制|的作用范围 |
限定符
限定符是元字符的一种,限定文本可出现的数量
符号 | 作用 |
---|---|
* | 重复表示出现0次或者多次 |
+ | 重复表示出现1次或者多次 |
? | 重复表示出现0次或者1次 |
{n} | 区间量词,限制文本n个字符, |
{n,} | 区间量词,限制文本n个或多个字符 |
{n,m} | 区间量词,限制文本n到m个字符 |
转义字符
转义字符,在字符前面,字符意思
符号 | 作用 |
---|---|
\ | 转义字符,在元字符前面可使元字符失效,变成普通字符 |
符号 | 作用 |
---|---|
\b | 匹配单词的开始或者结束,表示始末位置。 |
\d | 匹配一个数字字符。等价于 [0-9] |
\D | 匹配一个非数字字符。等价于 [^0-9] |
\w | 匹配字母、数字、下划线。等价于[A-Za-z0-9_ ] |
\W | 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_ ] |
以上为列举的常用字符,我们用这些来匹配电话号码,一般电话的形式为三位区间+八位号码 或者四位区+七位号码,其中区间与号码为括号或者“-”连接。
例如(010)123456788 ,010-1234578
(0536)1234567 , 0536-1234567
分析,文本分为两部分()内外或者 - 前后 ,()和 - 不能同时出现,分38型和47型。
以三八型举例
目标 | 实现 |
---|---|
()出现或者 - 出现 | \( \)|- |
()内数字为三位 | \d{3} |
后面为8位 | \d{8} |
这个正则为 \(\d{3}\)\d{8}|\d{3}-\d{8} 47同理
高级用法
零宽断言
零宽断言:从字面意思看,零宽度,代表只判断位置不捕获,断言:用来声明一个应该为真的事实,满足一定的条件/断言。其实就是匹配某个条件但又不希望返回结果中有这个条件
— | 格式 | 含义 |
---|---|---|
正向 | (?=exp) | 零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式。 |
正向 | (?<=exp) | 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式。 |
反向 | (?!exp) | 零宽度负预测先行断言,它断言此位置的后面不能匹配表达式。 |
反向 | (?<!exp) | 零宽度负回顾后发断言,它断言此位置的前面不能匹配表达式。 |
零宽断言查找的内容是不包含检索条件的,不被捕获
举例:查找reading a book and running
(?=exp) :查找以 ing 结尾的单词 正则为 \b\w+(?=ing\b) 匹配结果为 ing 前面的 read 和 runn
(?<=exp) : 查找以 r 开头的单词 ,正则为 \b\w+(?<=r\b) 匹配结果为 r 前面的 eading 和 unning
(?!exp) : 查找以 r 开头的单词 ,正则为 \b\w+(?<!r\b) 匹配结果为 r 前面的 eading 和 unning
参考
https://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
正则测试网址
http://www.jsons.cn/reg/