美文网首页
正则表达不再靠control+v

正则表达不再靠control+v

作者: HotCatLx | 来源:发表于2018-05-10 23:55 被阅读48次

1. 前言

  • 以前每次需要正则的时候总是去control+c&v,后来有次遇到大牛写逻辑业务的时候直接用正则处理一些判断,觉得:嗯!很cool,需要去了解下!!
  • 看完之后,基本语法了解了之后还是要多用,多尝试,才能把这个技能写的越来越溜,才能把这个逼装好

2. 准备

  • 首先先怎么要看几篇文章吧,主要看了小松哥的文章和语法介绍

    系统地学习正则表达式(一):基础篇
    正则表达式 - 语法

  • 工具:Regextor:可以校验你写的的正则表达式的正确性的APP,APPStore上6元,当然有时间可以自己找找破解版
    Regextor.png
  • 正则表达式就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑,画下重点:规则字符串+过滤匹配

3. 字符&字符集的匹配

3.1 精确匹配某一个字符
  • 使用[]包裹的字符即是需要特殊匹配的字符
  • 默认是会区分大小写


    精确某一个字符.png

3.2 匹配任意字符

  • 使用.来表示一个任意字符, 使用..来表示两个任意字符,以此类

    匹配一个任意字符.png
    匹配两个任意字符.png
  • 解释:

    c.t:会匹配以c开头,以t结尾,中间为任意一个字符的字符串
    c..t会匹配以c开头,以t结尾,中间为任两个字符的字符串

3.3 匹配特定字符集

  • 使用[xxx]包裹的内容表示匹配特定字符集中中的一个字符

    匹配特定字符集.png
  • 解释:

    [abcd]会匹配a or b or c or d。所以c[abcd]t会匹配" cat "和" cbt "而不会匹配" cet "

3.4 匹配特定字符集区间

  • [x-x]表示匹配一个特定的区间
  • 常用的字符集区间

    [a-z]:匹配所有小写字母区间
    [A-Z]:匹配所有大写字母区间
    [0-9]:匹配所有数字区间
    [A-z]: 匹配从 ASCIIA到ASCIIz的所有字符(不仅仅匹配所有字母,还匹配在 ASCII 表中 A 到 z 中的字符,如 [ 和 ^ 等)
    [A-Za-z0-9] :匹配所有的大小写字母和数字

匹配字符集.png

3.5 非字符集的匹配

  • 使用场景:需要排除一组不需要匹配的字符集
  • ^是将字符集合中的所有字符都取消匹配
  • ^要写扎起字符集[]
非字符集的匹配.png
  • 解释:

    [^a-z] 匹配所有不是小写字母的字符

4. 元字符

4.1 转义字符及补充

  • 正则中的元字符.都需要加上\转义
  • 需要匹配\则需要使用\\or\\\来实现
    \转义字符的补充.png
\转义字符的补充2.png

4.2 常用元字符

元字符 描述
[\b] 退格符
\f 换页符
\n 换行
\r 回车
\t 制表符
\v 垂直制表符
\d 任何数字 (同 [0-9])
\D 任何非数字 (同 [^0-9])
\w 所有的文字数字式字符:大小写字母、数字和下划线 (同 [a-zA-Z0-9_])
\W (同 [^a-zA-Z0-9_])
\s 所有的空白字符 (同 [\f\n\r\t\v])
\S 所有的非空白字符 (同 [^\f\n\r\t\v])
原字符的使用1.png 原字符的使用2.png

5. 匹配次数&多次匹配的使用

5.1 "1+"次匹配(一次以上匹配)

  • +表示匹配一个或者多个字符。例如,a将匹配"a",而a+则匹配一个或者多个"a"
  • 当在字符集合上使用+的时候,需要将+符号放在集合外面
一次以上的匹配.png 字符集一次以上的匹配.png

5.2 "0+"次匹配(0次以上匹配)

  • 匹配零个或更多字符的时候,可以使用*元字符
    0次以上匹配.png
0次以上字符集匹配.png

5.3 0or1次匹配(匹配0个或者1个字符)

  • ?匹配零个或者一个字符。所以:?非常适合于在文本中匹配一个可选的字符

5.4 匹配次数-精确匹配次数

  • 指定匹配的次数。次数可以在“ { ”和“ } ”之间指定,表示在{}之前的字符执行几次匹配
    指定次数匹配.png

5.5 匹配次数-至少匹配次数

  • 至少匹配次数:只指定匹配次数的最小值。eg:{2,}意味着匹配至少两次
  • 次数区间匹配:eg:{2,3}意味着最少匹配 2次,最多匹配3次
  • ?和{0,1}的功能是一样的,+和 {1,}的作用是一样的
    至少区间匹配次数.png
至少匹配次数.png

6. 贪婪匹配

  • 先看个🌰,但是匹配结果并不是我们想要的结果


    贪婪匹配.png
  • 为什么没有像预期匹配两个cat?
    • 这是因为*+都是贪婪匹配。也就是说,正则表达式总是寻找最大的匹配,而不是最小的,设计如此,我觉得的就像优先级一样,贪婪匹配的优先级最低,匹配程度最广
    • 贪婪匹配的时候就要使用这些量词的非贪婪匹配(匹配尽可能少的字符).非贪婪量词是在量词后面加上?
贪婪量词 非贪婪量词
* *?
+ +?
{n,} {n,}?
非贪婪量词.png

7. 匹配边界

  • 字符串边界匹配的元字符是^$分别用于字符串的开始和结束
  • 注意^如果位于集合开始处的话,则表示否定;如果在集合外面,则将匹配字符串的开始位置
  • 🌰🌰🌰:

    [^a-z] : 表示匹配非小写字符
    ^[a-z]: 表示匹配字符串的开始位置,第一个字符匹配小写字符

匹配边界(开始).png 匹配边界(结束).png
  • 综合实例,实际开发中很多这样的需求,以xx开头,以xx结尾的字符串校验,或者字符串中不允许有其它字符等等
    综合例子.png
综合例子错误.png

8. 实战

相关文章

  • 正则表达不再靠control+v

    1. 前言 以前每次需要正则的时候总是去control+c&v,后来有次遇到大牛写逻辑业务的时候直接用正则处理一些...

  • 正则表达不再靠control+v(实操篇)

    1. 前言 前面的正则的基础语法了解之后,正式开始实际应用 对基础知识感兴趣的可以看看我写的基础篇 《正则表达不再...

  • Python中的正则表达式的使用

    非教程——仅供参考以下内容只说明在Python中如何使用正则表达式,对正则表达式本身不再说明,如果想了解正则表达式...

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • linux shell正则表达式

    正则 普通正则表达式 扩展正则表达式 普通正则表达式 正则表达式 位置相关的正则^: 表示锚定行首,此字符后面的任...

  • 正则、本地存储

    正则表达式 正则 正则表达式 本地存储

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

      本文标题:正则表达不再靠control+v

      本文链接:https://www.haomeiwen.com/subject/sjqxdftx.html