正则在线测试网站:https://regexr-cn.com

正则练习平台:https://www.codejiaonang.com/#/course/regex_chapter1/0/0

image-20220124154750051

[]字符集:匹配集合中的任何字符

  • -表示区间,例如:[a-z]表示小写字母a到z

  • \转义特殊字符,[\]]表示匹配]

  • ^表示取非,[^]称作非集,匹配不在集合中的任何字符,例如我[^你]匹配我字后面没有你字(匹配两个字)

快捷方式

\d数字,匹配任意数字(0-9)

\w单词,匹配字母、数字、下划线

\s空白字符,匹配任何空白字符。(空格,制表符tab,换行符)

\b词边界,匹配一个单词边界,也就是指单词和空格见的位置,成对使用,例如\bawesome\b,匹配完整的单词,前后不能有其他字母,否则将匹配失败

image-20220125125138035

快捷方式取非,将上述dwsb等字母,换成大写即可

开头和结尾

^开头,匹配字符串开头,或者当使用多行标志时,匹配一行的开头

$结尾,匹配字符串结尾,或者当使用多行标志时,匹配一行的结尾

例如^abcd会匹配abcdefg中的abcdefg$会匹配abcdefg中的efg

任意字符

.,匹配任何字符(不包括换行)

量词

?,匹配在0和1之间个前面的标记,例如favou?r,匹配的时favour和favor

{n},匹配n个前面的标记,例如\d{10},匹配连续10个数字

{n,m}贪婪模式,匹配n到m个前面的标记,有连续的m个就会匹配m个

{n,m}?非贪婪模式,只会匹配到连续的n个就停止匹配,例如下图

image-20220124234228787

*,匹配0个或更多个前面的标记,例如f.*,会匹配所有f开头的字符

+,匹配1个或更多个前面的标记,例如f.+,会匹配所有f开头的字符,但不匹配单独的f

分组提取

()捕获分组,把多个标记分在同一组并创建一个捕获分组,用来创建子串或引用

|或者条件

(?:表达式)非捕获分组,在不创建捕获分组的情况下,把数个标记组在一起

image-20220125164458925

image-20220125173535988

(表达式)\1分组的回溯引用,\1的效果是重新使用第1个分组去匹配,例如(\w)(\w)\2\1,匹配abba这种类型的字符,注:只有()有效,(?:)等无效

断言

可以理解为预搜索,可对字符串做限制要求

先行(表示从某个位置向右看)

(?=)正向先行断言,匹配主表达式后面的组而不将其包含在结果中(保证右边含有某字符)

可以翻译为:(?=表达式)右边存在

image-20220125175109411

(?!)反向先行断言,指定著表达式后无法匹配的组,若匹配结果将被丢弃(保证右边不出现某字符)

可以翻译为:(?!表达式)右边不存在

image-20220125181138445

tips:正向是=,反向是!,也即正向是,反向是没有

后行(表示从某个位置向左看)

(?<=)正向后行断言,匹配主表达式之前的组,而不将其包含在结果中

可以翻译为:(?<=表达式)左边存在

(?<!)反向后行断言,指定在主表达式之前无法匹配的组,如果匹配,则结果将被丢弃

可以翻译为:(?<!表达式)左边不存在

image-20220125181836600

image-20220125183732972