正则表达式

概念

  1. 正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,将匹配的子串替换或者从某个串中提取符合某个条件的子串。

    runoo+b 可以匹配runoob runooob runoooob等,+号代表前面的字符必须至少出现一次
    runoo*b 可以匹配runob runoob runoooob等,*号代表前面的字符可以不出现,也可以出现一次或多次
    colou?r  可以匹配color或者colour,?问号代表前面的字符最多只可以出现一次
  2. 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

  3. 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为”元字符”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

普通字符

  1. 普通字符包括没有显式指定为元字符的所有可打印和不可打印字符,这包括所有大小写字母,所有数字,所有标点符号,和一些其它符号

  2. […] 将会匹配[]中括号中的所有字符

  3. [^…] 带个^,将会匹配除了[…]括号中的所有字符

  4. [a-z] 带 - ,表示一个区间,匹配括号中限制了范围的所有字符

  5. . 匹配除了换行符之外的任何单个字符,相当于[^\n\r]

  6. [\s\S] 匹配所有,\s时匹配所有空白符,包括换行,\S非空白符,不包括换行

  7. \w 匹配字母,数字,下划线,等价于[A-Za-z0-9_]

特殊字符

  1. 使用特殊字符时必须进行转义,使用 \ 进行转义

限定符

  1. 限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

  2. ? * +

  3. {n} n是一个非负整数,匹配确定的n次。例如o{2},会匹配到food中的oo,但是不会匹配到bob中的一个o,也可以理解为必须几次

  4. {n,} 至少匹配n次,例如o{2,} 不能匹配bob中的o,但是可以匹配到foooooo的中的所有o,o{1,}等价于o+,o{0,}等价于o*

  5. {n,m} n<=m,最少匹配n次且最多匹配m次,

  6. 注意,限定符出现在范围表达式之后,因此,应用于整个范围表达式。/[1-9][0-9]**/

贪婪

  1. 下面的表达式匹配从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容。

    /<.*>/
  2. *** 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。**

  3. 非贪婪:如果只需要匹配开始和结束h1标签

    /<.*?>/
    1. 通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从”贪婪”表达式转换为”非贪婪”表达式或者最小匹配。

https://www.runoob.com/regexp/regexp-syntax.html