正则表达式

Posted hedger-lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式

正则规则

  • 第一条规则: 本身是哪一个字符,就匹配字符串中的哪一个字符
  • 第二条规则:使用字符组,一个字符组就代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配上

字符组 [ ]

  • 格式:[字符1字符2]
  • 可以指定范围
    • 所有的范围都必须遵循ascii码从小到大来指定
      • [0-9] [a-z] [A-Z]

元字符

带 的元字符

  • d 表示所有的数字

    • d --> 是转义符,转义符转义了d,让d能够匹配所有0-9之间的数
  • w 表示所有的数字、字母、下划线

  • s 表示所有的空白,空格,换行,制表符

    • 匹配制表符
    • 匹配换行符
  • D 表示所有的非数字

  • W 表示 除字母、数字、下划线之外的所有字符

  • S 表示非空白

特殊

  • . 表示除了换行符之外的所有内容
  • [] 字符组,只要在中括号内的所有字符都是符合规则的字符
  • [^] 非字符组,只要在中括号内的所有字符都是不符合规则的字符
  • ^ 表示以一个字符为开始
  • $ 表示以一个字符为结束
  • | 表示或,注意点:如果两个规则有重叠部分,总是长的在前面,短的在后面
    • 只负责把两个表达式分开,如果是在整个表达式中只对一部分内容进行或,需要分组
  • () 表示分组,给一部分正则规定为一组,| 这个符号的作用域就可以缩小了

量词

  • {n} 表示只能出现n次

  • {n,} 表示至少出现n次

  • {n,m}表示至少出现n次,至多出现m次

  • ? 表示匹配0次或1次 表示可有可无 但是有只能有一个 比如小数点

  • + 表示匹配1次或多次

  • * 表示匹配0次或多次 表示可有可无 但是有可以有多个 比如小数点后n位

  • ?字符 表示按照元字符规则在量词范围内匹配,一旦遇到该字符就停止

    • .*?x 匹配任意的内容任意多次遇到x就立即停止

.*?的用法

. 是任意字符

* 是取 0 至 无限长度

? 是非贪婪模式。

在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x
就是取前面任意长度的字符,直到一个x出现

匹配原则

贪婪匹配

默认匹配原则,使用的是回溯算法,总是会在符合量词条件的范围内尽量多匹配

非贪婪匹配

惰性匹配,总是匹配符合条件范围内尽量少的字符串

几个常用的非贪婪匹配Pattern

*? 重复任意次,但尽可能少重复

+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

技术图片

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式