浅谈正则表达式

1 篇文章 0 订阅


经常碰见正则表达式,每次用的时候就去百度,但总有些特殊格式需要配置,因此,抽空看了一下 《精通正则表达式》,记录 一下浅显的理解

简介

先看看《精通正则表达式》中的定义。

正则表达式(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 前面的 readrunn
(?<=exp) : 查找以 r 开头的单词 ,正则为 \b\w+(?<=r\b) 匹配结果为 r 前面的 eadingunning

(?!exp) : 查找以 r 开头的单词 ,正则为 \b\w+(?<!r\b) 匹配结果为 r 前面的 eadingunning

参考
https://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

正则测试网址
http://www.jsons.cn/reg/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值