专业的电脑相关知识学习网站
主页 > 编程 > PHP教程 > 内容

一篇文章读懂正则表达

发布时间:2021-12-12   来源:原创    
字号:
一、正则简介

正则表达式是一种独立的语言,可以运用如php、java等编程语言中。
数据库:SQL语言
XML:Xpath
正则:数据的检索
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等
关键词:
select * from product where t select * from product where title like ‘%手机%’;//模糊匹配
在js中,把要查询的条件称之为一种匹配模式
某种:由于模糊查询,那么其匹配出来是多种多样。
二、为什么使用正则表达式

1)信息隐藏
180****2818 135****23234
2)信息过滤
中国政府 中国zf
3)信息采集器
门户、医疗,网址、电话
l8073o32818
4)数据匹配、数据查询
三、快速入门

查找一个字符串中是否具有数字“8”


查找一个字符串中是否具有数字


查找一个字符串中是否具有非数字


四、正则对象

1、如何创建正则对象
1)隐式创建
数组:var arr = [元素];
正则:var reg = /正则表达式/模式;
2)显示创建(直接实例化)
数组:var arr = new Array(元素);
正则:var reg = new RegExp(‘正则表达式’,’模式’);
两种的实现的功能是一样的,但是还有区别的?
语法不同


正则对象在显示创建时,是写在字符串中的,所以在使用时,必须对特殊字符进行转义,从此点来看,我们推荐大家使用第一种隐式创建。
2、模式
g:global 全局匹配
i:ignore 忽略,忽略大小写
五、如何去使用正则对象

RegExp类
test(str) : 判断字符串中是否有指定模式匹配的字符或字符串 返回Boolbean
exec(str) : 返回指定模式的字符串
String 类
search : 返回指定模式的字符串所在位置
match : 返回指定模式的字符串,返回数组
replace : 返回指定模式替换后的字符串
split : 返回指定模式分割后的字符串,返回数组
split(‘|’)
split(‘d’)
示例代码:









六、几个重要的概念

1、子表达式
在正则表达式中,通过一对小括号()括起来的表达式,我们称之为子表达式
d(d)d
2、捕获
在js中,当通过子表达式匹配到相应的内容,系统会自动将其存储缓存区中,我们把这个过程称之为捕获。
3、反向引用(后向引用)
在正则表达式中,我们可以通过 (n代表缓存区域,是一个数字),获取到缓存区中的存储内容
12
例1:匹配dddphpddd模式的字符


七、习题

查找连续的四个数字,如:3569
var reg=/dddd/gi;
查找连续的相同的四个数字,如:1111
var reg=/(d)111/gi;
查找数字,如:1221,3443
var reg=/(d)(d)21/gi;
查找字符,如:AABB,TTMM
var reg=/([a-z])1([a-z])2/gi;
查找连续相的四个数字或四个字符
扩展:给你一个字符串asdfasdfasdhello
fasdfsadfphpasdfaslkjl,通过正则表达式匹配出所有的html标签及内容


八、exec与子表达式

例1:exec的使用方法


例2:exec与子表达式


效果:


说明:在我们的正则表达式中的方法exec与子表达式配合使用时,首先该程序会执行以下过程:
第一次执行:
首先在result[0]中显示匹配到内容,第一个子表达式将追加到数组result中,如第一个就是result[1],如果存在第二个表达式,其会把缓存到的内容追加到result数组,成为result[2],后面以此类推。
九、正则表达式语法

重点:正则三步走
1)确定你要查什么
2)确定查多少
3)从哪里查
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
普通字符:a b c 1 2 3
特殊字符:d w D
1、元字符中限定符
限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配(三步走中的第二步)
* : 匹配0到多
+ : 匹配1到多
? : 匹配0或1
{n} : 匹配n次
{n,} : 最少匹配n次
{n,m} :最少匹配n次,最多匹配m次
在js正则表达式中,*,+,?可以采用{}的形式表示或代替
* :{0,}
+ :{1,}
? :{0,1}
例1:匹配已知数目的字符串


例2:匹配最少有多少个字符串


例3:匹配某一数量范围内的字符串


2、贪婪模式与非贪婪模式
观察以上例2与例3发现,当我们去匹配某一个数量返回内的数据,正则默认会匹配最多的那个结果,我们把这种效果称之为
“贪婪匹配”,默认情况正则表达式采用的就是贪婪匹配模式
非贪婪匹配:匹配最少的那个情况,我们称之为非贪婪匹配,可以采用?的形式实现。
非贪婪匹配示例代码:


3、字符匹配符
字符匹配符用于匹配某个或某些字符
[]:在正则表达式称之为字符簇(只匹配一个字符)
[a-z]:匹配a-z中的任一字符
[A-Z] :匹配A-Z中的任一字符
[0-9] :匹配数字0-数字9中的任一数字(d)
[0-9a-z] : 匹配数字0-数字9或a-z中任一字符
[0-9a-zA-Z] : 匹配数字0-数字9或a-z或A-Z中的任一字符
[abcd] :匹配字符a或字符b或字符c或字符d
[1234] :匹配数字1或数字2或数字3或数字4、
^ : 上档键,在正则中表示取反(仅限于字符簇)
[^a-z] :匹配除a-z中的任一字符
[^0-9] :匹配除0-9中的任一字符
[^abcd] :匹配除字符a或字符b或字符c或字符d以外的任一字符
d :匹配一个数字字符。[0-9]
D :匹配一个非数字字符。[^0-9]
w :匹配包括下划线的任何单词字符。[0-9a-zA-z_]
W :匹配任何非单词字符。[^0-9a-zA-Z_]
s :匹配任何空白字符 空格 换行 制表位
S :匹配任何非空白字符。
. :匹配除 " " 之外的任何单个字符
例1:如何匹配任一字符
[. ]
例2:W是否可以匹配到


例3:通过[a-z]匹配任一a-z的字符


例4:匹配[A-Z]


例5:匹配w


例6:匹配中文字符


扩展:如何匹配所有的中文字符
第一种:u5hs
第二种:数据字典
数据字典文件(中文字符)
通过遍历筛选的方式进行查询
txt
4、定位符
例1:如何去判断一个人的年龄是否符合要求(01-99)


例2:如何去判断一个手机号码是否符合要求(待改正)


引入概念:
定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
 匹配一个单词边界 开始 空格 结尾
B 匹配非单词边界
例2:改进后的手机验证正则表达式


例3:匹配一个单词边界


例4:匹配一个非单词边界


5、转义符
定义一个转义符
/ . ( ) { } ‘ “ [ ] * ? + ^ $ -
在我刚才讲过的有特殊意思的字符全部需要转义
示例代码:


6、选择匹配符
在正则表达式可以采用|(或的意思)代表选择匹配符
例1:


7、特殊用法
预查
(?=) :正向预查
(?!) : 反向预查
查询结果,但不捕获
(?:)
例1:正向预查


例2:负向预查


例3:查询结果,但不捕获


8、扩展:结巴程序
我...我是是..一个个...帅帅帅帅...哥!;
我是一个帅哥!
思路:
1、先把省略号去除掉,变成
我我是是一个个帅帅帅帅哥!
用到的知识:
正则知识点:.+
替换:replace
2、去除掉重复的数据
我我是是一个个帅帅帅帅哥!
用到的知识:
正则:
通过点号匹配中文字符
通过子表达式捕获数据
/(.)1*/gi
替换:replace
难点:在replace中我要把匹配到数据替换成什么?
replace第二个参数可以直接引用缓存区中的内容,引用方式$n(n代表数字1到n)区域名


都看到这里就顺手关注下吧~~~~ -_-

图说天下

×
织梦二维码生成器