正则表达式教程

正则表达式

匹配非打印字符(assii码前27个 除了0
  • \cx: 例: \ci 匹配ctrl+i(windows系统下面 ) 匹配相似\t的字符 就是匹配ascii码的第十个字符,和字母表顺序错开一个,由于零不匹配,这个x能够是a-z,A-Z,别的字符跟在\c后面将当作匹配‘c’字符 例如:\c1
  • \f: 匹配一个换页符号 [\cL]也能够匹配,做用:让打印机打印下一张纸
  • \n: 匹配一个换行符。[\cJ]
  • \r: 匹配一个回车符。[\cM]
  • \s: 匹配任意空白字符,不能显示上屏幕上的,上面的他均可以匹配到
  • \S: 匹配任何非空白的字符,和上面的相反,能显示在屏幕上的
  • \t: 匹配一个制表符号。 键盘上的tab键
  • \v: 匹配一个垂直制表符。它的做用是让‘\v’后面的字符从下一行开始输出,且开始的列数为“\v”前一个字符所在列后面一列。
  • \w: 相似[0-9a-zA-Z_]。表示数字、大小写字母和下划线。
  • \W: [^0-9a-zA-Z_]。非单词字符。和上面匹配的内容相反。
  • \d: [0-9]。表示是一位数字。
  • \D: [^0-9]。表示除数字外的任意字符。

上面的\n \r \s \S \t \w \W \d \D都是经常使用的,剩下的都是基本上不会用到的正则表达式

特殊匹配字符

若是要匹配如下的特殊字符,必须先让字符转义即'\x',windows

  • $: 匹配之前面结尾的字符。 例如:ddsdsfsfa a$ 只会匹配a这个字符,若是ddddsdsffb 匹配这个字符串,则没有匹配3d

  • (): 标记一个表达式的开始和结束的位置code

  • *: 匹配前面的表达式零次或者屡次blog

  • +: 匹配前面的表达式一次或者屡次教程

  • .: 匹配除换行符\n以外的任何单字符ci

  • []: 匹配中括号表达式里面的东西,通常和^一块儿用字符串

  • ?: 匹配前面的表达式零次或者一次get

  • : 将下一个字符转义class

  • ^: 匹配字符串开始的位置

  • {: 区配限定字符

    () 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。一个()表明一个组 ([a-z][0-9])这个正则你必须得先匹配到前面是a-z里面的东西,后面跟的还得是0-9里面的东西,才会匹配到值 例如:aadccc23这个字符串就能够匹配到c2,aadccc@23这个字符串,([a-z][0-9])经过这个正则就匹配不到值 。 []是定义匹配的字符范围。好比 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\t]表示tab。 {}通常用来表示匹配的长度,好比 \t{3} 表示匹配三个tab,\t[1,3]表示匹配一到三个tab。

  • |: 指明两项之间的一个选择。(小括号‘()’会改变他的做用范围) 例:wl:625363199@qq.com

    wl|yjm|khl:.*  和 (wl|yjm|khl):.*

    后者会匹配完整的wl:625363199@qq.com 前者则只会匹配wl ,由于后者的小括号改变了|做用范围,(wl|yjm|khl)使用范围变成了(wlyjmkhl),和:.*后面的字符不在一个段,因此能够匹配整个字符,前者的范围在wl|yjm|khl:.* 上面,能够这样理解wl为一组yjm 为一组 khl:.*为一组,因此匹配到wl就匹配完了若是将正则改成yjm|khl|wl:.* 就能够 匹配完整的字符串

贪婪匹配模式和非贪婪匹配模式(懒惰匹配)

贪婪模式的匹配正则:

  1. “{m,n}”有n个最多匹配n个 例如:d{1,3} ddd 匹配到的值就是ddd
  2. "{m,}"有多少个就匹配多少个 例如:d{1,} ddddd匹配到的值就是ddddd
  3. "?"有一个就匹配一个 例如:d? ddd匹配到的值就是d d d
  4. "*"有多少个就匹配多少个 例如:"d星号(typora的bug)" ddd匹配到的值就是d d d
  5. "+"有多少个就匹配多少个 例如:d+ ddd匹配到的值就是d d d

非贪婪模式正则:

  1. "{m,n}?"按m匹配 例如:d{1,3}? ddd 匹配到的值就是d d d 一个一个值返回
  2. "{m,}?"按m个数匹配 例如:d{1,}? ddd 匹配到的值就是d d d一个一个值返回
  3. "??"匹配零个 例如:d?? ddd 匹配到的值就是没有 匹配
  4. "*?"匹配零个 例如:d星号? ddd 匹配到的值就是没有匹配
  5. "+?"匹配一个 例如:d+? ddd 匹配到的值就是 d d d一个一个值返回
限定符
  • *:匹配零次或者屡次
  • +:匹配一次或屡次
  • ?:匹配零次或一次
  • {n}:n不能为负数,至少匹配n次
  • {n,}:至少匹配n+次,
  • {n,m}:至少匹配n次最多匹配m次。n<=m
定位符
  • ^: 匹配字符串开始的位置,和中括号结合使用体验最佳
  • $: 匹配之前面结尾的字符。 例如:ddsdsfsfa a$ 只会匹配a这个字符,若是ddddsdsffb 匹配这个字符串,则没有匹配
  • \b: 匹配一个单词边界,即字与空格间的位置,例如:?abc \ba 能匹配到a,\bb就不能配置到b了,由于b前面没有没有边界字符,?a中bc 这样\bb 就能匹配到b了由于b和前面的‘中‘这个字符产生了边界,因此就能够匹配了,通常符号和中文之间,符号和英文之间,中文和英文之间会产生边界。
  • \B: 匹配一个非单词边界,和上面匹配的相反,通常符号和符号之间,英文和英文之间,中文和中文之间没有边界。

^:不放在中括号里面匹配的是一行开头的部分,例如:daf ^d 这个是能够匹配到d的 ^da 也是能够匹配到da的,它们都跟在开头的后面是连续的,^a 是在daf这个字符串中是匹配不到a的,adf 这个字符串就能够被^a匹配到 ,a字符是adf字符串中开头的第一个字符因此能够被匹配到,^d 匹配adf这个字符串,匹配不到d,由于d不是开头的第一个字符。^ad 匹配adf这个字符串能够匹配到ad,由于ad是开头前两个字符,是连续的因此能够匹配。

^:放在中括号里面[^daf] 匹配以d开头的字符或者以a或者以f开头的字符,简单的说就是不匹配daf 能够理解为取反的意思。例如:dafbbdcfgh 这个[^daf] 就会匹配 b b c g h 这几个字符 。[^wl]匹配”wl是w测l试呀wl字符串“这个字符串的结果是,是、测、试、呀、字、符、串。除了wl这两个字符别的字符都匹配。

捕获

  • ?=: 前瞻,匹配表达式前面的表达式的内容。例如:a(?=b) 匹配ab这个字符串就会匹配到a这个字符,匹配ba这个字符串就匹配不到值 。
  • ?<=:后顾,匹配表达式后面的表达式的内容。例如:(?&lt;=b)a 匹配ba这个字符串就会匹配到a这个字符,匹配ab这个字符串就匹配不到值 。
  • exp1(?!exp2):负前瞻,匹配后面不是exp2的exp1 例如:a(?!b)匹配ba这个字符串会匹配到值,可是匹配bab,就匹配不到值 。由于a的后面出现b这个字符了。
  • (?<!--exp2)exp1 :负后顾,查找前面不是exp2的exp1,例如:(?<!b)a匹配ab这个字符串就会匹配到值 ,可是匹配bab这个字符就没法匹配到值 ,由于a字符的前面出现了b字符,因此没法匹配。
  • ?: 非捕获分组,(?:a)匹配ab这个字符串的时候虽然会匹配到,可是不会把值存起来,增长正则的匹配速度。而(a)匹配ab这个字符串的时候匹配到的同时,也会将值存起来,后面能够提取出来。

以上就是正则的基础教程了,正则就是多用就熟悉了。

转载代表出处就能够,老师好我叫王同窗。