基础知识----正则

正则表达式简介

  1. 测试字符串的内的模式看字符串是否符合规范,就是数据验证
  2. 替换文本
  3. 在字符串内提取子字符串

正则表达式语法

一.普通字符

  1. +符号表示,前面的一个字符至少出现一次( >=1)
 runoo+b

可以匹配runoob,runooob,runoooob等

  1. *符号表示,前面的一个字符可以出现0次或者一次或者多次( >= 0)
 runoo*b

可以匹配runob,runoob,runooob等

  1. ?符号表示前面的一个字符最多只可以出现一次( 0次或者1次 )
    colou?b

可以匹配colorb或者coloub

  1. [ ]符号表示匹配中括号里面所有的字符
    [acb]

可以匹配字符串absxcvb里面a b c 字母

  1. [^ ]符号匹配除了中括号内的所有字符
 [^acb]

可以区配acvbngdsrt中除了a c b的所有字母

  1. [A-Z]符号匹配所有大写字母
 [A-Z]

可以匹配GgoogleAXC中的G A X C

  1. [a-z]符号匹配所有小写字母
 [a-z]

可以匹配GoogleASXC中的o o g l e

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

可以匹配asdfghj里面的所有(除了换行)

  1. [\s\S]可以匹配所有
\s 

可以匹配所有的空白符,包括换行

\S

可以匹配所有的非空白符,不包括换行

  1. [A-Za-z0-9_]可以匹配所有字母,数字,下划线
    相当于\w
    [A-Za-z0-9_] = \w

二.非打印字符

  1. \cx x必须为A-Z或者a-z之一,可以匹配由x指明的控制字符
  2. \f匹配一个换页符
  3. \n匹配一个换行符
  4. \r匹配一个回车符
  5. \s匹配任何空字符,包括换行符,制表符,换页符
  6. \S匹配任何非空字符,不包括换行
  7. \t匹配一个制表符
  8. \v匹配一个垂直制表符

三.特殊字符
如果想要查找这些符号,则需要转义*

  1. $匹配所有字符串的结尾部分
  2. ()标记子表达式的开始与结束的位置
  3. *匹配前面的一个字符0次1次或者多次
  4. +匹配前面的一个字符1次或者多次
  5. .匹配除换行符\n,\t之外的任何单字符
  6. [ 标记一个中括号表达式的开始
  7. ?匹配前面的子字符0次或者1次
  8. ^匹配字符串的开始
  9. {标记限定符表达式的开始
  10. |指明两项之间的一个选择,相当于或

四.限定符

  1. *匹配前面的一个字符0次,一次或者多次
 zo*

可以匹配z或者zo或者zooooo

  1. +匹配前面一个字符的1次或者多次
zo+

可以匹配zo或者zoooo,但是不可以匹配 z

  1. ?匹配前面一个字符的0次或者一次
    do(es)?

可以匹配do或者does,doxy里面的do

  1. {n},n为一个非负整数,匹配确定的n次
o{2}

不可以匹配boy里面的o,但是可以匹配book里面的oo

  1. {n,}n为一个非负整数,至少匹配n次
    o{2,}

可以匹配book或者fooooood里面的所有o,但是不可以匹配boy里面的o

  1. {n,m}n,m都为非负整数,其中n<=m,表示最少匹配n最多匹配m次

五.定位符
可以让你的正则表达式固定到行首或者行尾,正则表达式,可以出现在一个单词内也可以在一个单词的开头,或者一个单词的结尾

限定符和定位符不可以同时使用

  1. ^ 匹配字符串开始的位置
    注意区分[^],这个是,[...]匹配除了里面的字母
  2. $匹配字符串结尾的位置
  3. \b匹配一个单词边界,即字与空格的位置
  4. \B非单词边界匹配

六.选择

  1. ?=
    exp1(?= exp2):查找exp2前面的exp1
 runoob(?= [\d+])

匹配数字前面的runoob字符串

  1. ?<=
    (?<=exp2)exp1:查找exp2后面的exp1
 (?<=[0-9]+)runoob

匹配数字后面的runoob

  1. exp1(?!exp2):查找后面不是exp2的exp1
 runoob(?![0-9]+)

匹配后面不是数字的runoob

  1. (?<!exp2)exp1:查找前面不是exp2的exp1
 (?<![0-9]+)runoob

匹配前面不是数字的runoob

七.反向引用

正则修饰符

  • i ignore-不区分大小写 ,将匹配设置为不区分大小写,即A和a没有区别

  • g global-全局匹配(一般是只匹配一行)

  • m multi line -多行显示 ,使边界字符^和$匹配每一行的开头和结尾多行,不是字符串的开头和结尾

  • s 特殊字符原点. 包含换行符\n 默认情况下的. 是不包含换行符的,但是有了s之后,中间就可以包含换行符\n

正则元字符

  • \ 转义字符

  • ^ 匹配字符串开始的地方

  • $ 匹配字符串结束的地方

  • * 匹配0次,1次,或者多次

  • + 匹配1次,或者多次

  • ? 匹配0次或者1次

  • {n} 匹配n次,只可以n次

  • {n,} 匹配至少n次

  • {n,m} 匹配至少n次,至多m次

  • ? 当他紧跟在其他限制符后面时,匹配都是非贪婪的。如果没有,是默认贪婪,就是尽可能多的去匹配

  • . 匹配除了\b \r,之类的单个字符。如果要匹配所有的\n,那么就要用(.|\n)

  • (pattern) 匹配pattern且获取注意匹配值

  • (?:pattern) 匹配pattern但不获取匹配结果

  • (?=pattern) 正向肯定预查 从任何匹配pattern的字符串开始的地方开始查找匹配字符串

  • (?!pattern) 正向否定预查 从不匹配pattern的字符串开始的地方开始查找字符串

  • (?<=pattern) 反向肯定预查

  • (?<!pattern) 反向否定预查

  • x|y 匹配x或y

  • [xyz]匹配其中任意的一个字符

  • [^xyz] 匹配字符串中所有没有包含的字符

  • [a-z] 匹配从a到z的任意字符

  • [^a-z] 匹配不在a到z的任意字符

  • \b 匹配单词边界 er\b 可以匹配never的er 但是不可以匹配verb 的er

  • \B 匹配非单词边界 er\B 可以匹配verb的er 但是不可以匹配never的er

  • \cx 匹配由x指明的控制字符不理解

  • \d 匹配一个数字 相当于[0-9]

  • \D 匹配一个非数字 相当于[^0-9]

  • \f 匹配一个换行页

  • \n 匹配一个换行符

  • \r 匹配一个回车符

  • \s 匹配所有空白字符,包括制表符,空格,换页符等等

  • \S 匹配所有非空白符

  • \w 匹配字母数字下划线 [0-9A-Za-z_] [\w.%+-]匹配字母数字下划线,以及.%+-其中任意个

  • \W 匹配非字母数字下划线 [^0-9A-Za-z_]

正则匹配规则

  • 基本匹配模式

    • ^once 匹配以once开始的字符串 例如 once upon a time

    • bucket$ 匹配以bucket匹配的字符串 ,例如 who kept all of this cash in a bucket

    • ^bucket$ 表示只匹配bucket

    • 如果没有^ 或者 $ ,那么只要整个字符中含有 ,那么就是匹配的 。例如once,就可以匹配 who kept all of his cash in a bucket

    • ^\t 匹配字符串是否以制表符开头

  • 字符簇

    • [1]是以小写字母开头

    • [^a-z] 表示非小写字母

  • 确认重复出现


  1. a-z ↩︎

posted @ 2022-01-06 17:00  summer在writing  阅读(113)  评论(0编辑  收藏  举报