登录|注册|帮助中心|联系我们

导航
首页 综合百科 生活常识 数码科技 明星名人 传统文化 互联网 健康 影视 美食 教育 旅游 汽车 职场 时尚 运动 游戏 家电 地理 房产 金融 节日 服饰 乐器 歌曲 动物 植物
当前位置:首页 > 生活常识

正则条件概念的应用(正则表达式语法)

发布时间:2023年1月5日责任编辑:李小芳标签:条件
前言

正则表达式又称Regex,是文本处理领域中非常常见的概念,这个概念方法在各个应用领域和编程语言下都有极大的运用价值,是每个编程人员都应该熟悉的字符串过滤技巧。

在学习正则表达式的过程中,相信很多小伙伴都有这样的困扰:网上没有系统的正则表达式的学习材料。

今天老K就给大家整理了一篇文章,详细介绍了正则表达式的各种概念。

我们就以:

?

正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。

作为示例文本,开始介绍吧。

?一、【字符类】匹配
    ?通过.可以匹配除换行符以外的所有字符,例如:
    表示所有字符:
    /./g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ?通过w、d、s分别用来匹配罗马字符、数字、空格,例: ??
      ???表示所有罗马字符
      /w/g
      匹配结果
      正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ???表示所有数字:
      /d/g
      匹配结果:
      正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ???表示所有空格:
      /s/g
      匹配结果:
      正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ??

3. 通过W、D、S用来匹配非罗马字符、非数字、非空格的字符串,例:

    ?表示所有非罗马字符:
    /W/g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ?表示所有非数字:
    /D/g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。 ?表示所有非空格:
    /s/g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。

4. 用[abc]的方式设定集合,匹配集合中的字符,例:
表示”普/通/字/符”中任意字符:
/[普通字符]/g
匹配结果:
正则表达式又称Regexr,可以用普 通 字 符(a~z 26个英文字母)和特殊字 符(元字 符)组合表示某些特定字 符模式。

5. 用[^abc]的方式设定集合取反,匹配不在集合中的字符,例:
表示不在”普/通/和/特/殊/字/符”中的任意字符:
/[^普通和特殊字符]/g
结果:
正 则 表 达 式 又 称 R e g e x r , 可 以 用普通字符( a ~ z 2 6 个 英 文字母 ) 和特殊字符( 元字符) 组 合 表 示 某 些特定字符模 式 。

6. 用[a-g]的方式表示区间,选择从a到g的字符,例:
表示在a到g的字符:
/[a-g]/g
结果:
正则表达式又称Re g exr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。

?二、【锚类】匹配
    ?用^abc表示匹配字符串起始位置的字符,例:
    表示在字符串开头的“正则”二字:
    /^正则/g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。
    说明:
    如果用/^普通/g去匹配就会匹配失败,因为“普通”两字不在字符串开头 ?用abc$表示匹配字符串结尾位置的字符,例:
    表示在字符串结尾的”字符模式。”:
    /字符模式。$/g
    匹配结果:
    正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。
    说明:
    如果”字符模式。”这几个字符不在字符串结尾,则会匹配失败。这里尤其需要注意,如果语句结尾有换行符,则字符串是以换行符结尾,需要加入n才行 ?用b表示单词边界和B非单词边界,此处的单词边界以空格或换行符作为判断逻辑,例: ??
      ???用b表示在单词边界的数字:
      /bd/g
      匹配结果:
      正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。
      说明:
      匹配文本里有2个数字,但由于6不在单词边界空格后面,所以没有匹配6而匹配到了2 ???用B表示不在单词边界的数字:
      /Bd/g
      匹配结果:
      正则表达式又称Regexr,可以用普通字符(a~z 26个英文字母)和特殊字符(元字符)组合表示某些特定字符模式。
      说明:
      匹配文本里有2个数字,但由于2在单词边界空格后面,所以没有匹配2而匹配到了6 ??
?三、转义字符

由于匹配需要,很多时候会用到一些+字符的组合,表示特殊含义而非其字符本身的含义。由于这种表示方式转换了字符本身的含义,所以被称为转义字符。

    ?转义特殊字符:
??.:由于.在正则中表示所有字符,所以用.表示字符”.”本身; ?*:由于*在正则中表示数量词,所以用*表示字符”*”本身; ?:由于在正则中表示转义模式,所以用表示字符””本身; ?

2. 字母类转义字符:

??t:此处用t表示制表空格,而非字符”t”; ?n:此处用n表示换行符,而非字符”n”; ?r:此处用r表示退格键操作,而非字符”r”; ??四、字符组

有时候需要根据条件检索特定字符,如在电子邮箱中找到用户名,就需要先从文本中用正则找到电子邮箱的字段,再在电子邮箱的字段里用正则找到用户名,这样会让简单的工作变得复杂。
字符组让这个工作变得容易起来。这里,我们用:

?

hahaha haa hah!

作为例句,了解一下字符组的使用吧:

    ?用圆括号表示字符组,如(abc),见下例:
    /(ha)+/g
    匹配结果:
    hahaha haa hah! ?用1表示正则表达式里的第一个字符组,2表示正则表达式里第二个字符组,3、4依次类推:
    (w)a1
    匹配结果:
    hah dad bad dab gag gab
    说明:
    此例中,当(w)匹配的结果为字符h,则1就表示h。1的匹配结果需要参考第一个字符组,即(w)的结果。
?五、相邻判断

匹配例句:

?

1pt 2px 3em 4px

1.可以用(?=ABC)、(?!ABC)的表达式,表示前瞻判断:

    ?正向前瞻判断,示例如下:
    表示在字符”px”前的数字:
    /d(?=px)/g
    匹配结果:
    1pt 2px 3em 4px
    说明:
    此处的(?=px)表示一个占位符,而非具体的字符 ?负向前瞻判断,示例如下:
    表示不在字符”px”前的数字
    /d(?!px)/g
    匹配结果:
    1pt 2px 3em 4px
    说明:
    此处的(?!px)表示一个占位符,而非具体的字符

2.可以用(?<=ABC)、(?<!ABC)的表达式,表示回顾判断:

    ?正向回顾判断,示例如下:
    表示在字符”p”后的罗马字符:
    /(?<=p)w/g
    匹配结果:
    1pt 2px 3em 4px ?负向回顾判断,示例如下:
    表示不在字符”p”后的罗马字符:
    /(?<!p)w/g
    匹配结果:
    1pt 2px 3em 4px
?六、数量词

匹配例句:

?

b be bee beer beers beeeee

    ?用数字表示的数量词: ??
      ???{n}表示匹配n个字符:
      /e{2}/g
      匹配结果:
      b be bee beer beers beeeee ???{n,}表示匹配n个以上字符:
      /e{2,}/g
      匹配结果:
      b be bee beer beers beeeee ???{n,m}表示匹配n到m个字符
      /e{2,3}/g
      匹配结果:
      b be bee beer beers beee ee ??

2. 用特殊符号*、+、?表示的数量词:

    ?*表示0个或多个字符:
    /e*/g
    匹配结果:
    b be bee beer beers beeeee ?+表示1个或多个字符:
    /e+/g
    匹配结果
    b be bee beer beers beeeee ??表示0个或1个字符:
    /b?/g
    匹配结果:
    b be bee beer beers beeeee ?关于*和+差别的说明:
    有些小伙伴可能会困惑在匹配时*和+都是匹配多个,但匹配0个和1个的差别是什么?有这个问题的小伙伴可以看下例是如何匹配字符串abc:
    /a.*bc/g能匹配上述字符串;
    /a.+bc/g不能匹配上述字符串,因为这个表达式不允许a和b没有字符;
?七、贪婪模式
    ?.+表示用贪婪模式进行匹配:
    /bw+/g
    匹配结果:
    b be bee beer beers beeeee ?.+?表示用非贪婪模式(懒惰模式)进行匹配
    /bw+?/g
    匹配结果:
    b be bee beer beers beeeee ?贪婪模式和懒惰模式:
    贪婪模式就是在满足表达式的前提下,匹配尽可能多的字符;
    懒惰模式,又称非贪婪模式,表示在满足表达式的前提下,匹配尽可能少的字符。
?总结

正则表达式是一项非常实用的技术,是每一个程序员都应该掌握的技能。
老K将所有的知识点汇总成了图表:

其它知识推荐

溜溜百科知识网——分享日常生活学习工作各类知识。 垃圾信息处理邮箱 tousu589@163.com
icp备案号 闽ICP备14012035号-2 互联网安全管理备案 不良信息举报平台 Copyright 2023 www.6za.net All Rights Reserved