正则表达式特殊字符含义
正则:用于匹配字符串中字符组合的模式
- 基础语法
- 特殊元字符
- 基本元字符:
.:默认匹配除换行符之外的任何单个字符\:在特殊字符之间的反斜杠表示下一个字符不是特殊字符,即转译|:逻辑或操作符,'x|y'即匹配x或y[]:匹配[]字符集合中的“1个”字符(记住是一个啊!!,要多个你得在后面加数量元字符)[^xyz]:反向字符集,原理等同上面的字符集,但是其意思是匹配任何没有在字符集里的字符。-:定义一个区间,比如[a-z]
- 数量元字符:
*:匹配前面那个表达式0-∞次,等价于{0, }+:匹配前面一个表达式1次或多次 === {1, }?:匹配前一个表大树0/1次,相当于{0,1}{n}:n为正整数,匹配前面一个字符刚好出现了n次,如/a{2}/ 即可匹配到Caancle中的aa{n, }:表示至少n次{n, m}:出现至少n次,至多m次+?|\*?|{}?:?如果紧跟在任何量词*、+、?或{}后面,会使得该两次变为非贪婪(匹配尽量少的字符),和缺省时用的贪婪模式(匹配尽可能多字符)正好相反了。例如对"123abc"使用/\d+/将会匹配到"123",而使用/\d+?/则只匹配到"1"
- 位置元字符:
^:匹配输入的开始,例如/^A/不会匹配"an A word"中的A,会匹配到An word中的A$:匹配输入的结束,同上道理\b:匹配一个词的边界(即一个词与另一个词的分界标志例如空格,-等等,除了数字,字母与下划线以外的字符都能算做,包括汉字。。。,但是其后跟汉字的话前面又不能是汉字,可以是字母等)。例如:/\bred/能匹配到"a red hat"中的"red",但是"_red","cred","1red"等就匹配不到了。\B:匹配一个非单词边界,跟\b刚好反的
- ❤回溯引用与前后查找:
(x):正则子表达式,会匹配x并记住匹配项,其中()成为捕获括号(即能够捕获匹配的内容并记住他)(?:x):功能同上,但是非捕获括号,即匹配了但不记住\n:即回溯引用前面捕获的子表达式的内容,如/(\d)a\1/,里面的\1能够知道前面的\d输入的是哪个数字,并在后面匹配一个相同的字符,例:"1a1"就能匹配到"1a2"就匹配不到了。同理如果你使用非捕获括号,就不会对其进行捕获,即无法回溯引用了。x(?=y):先行断言,匹配x,当且仅当x后面跟着y(注意,只会匹配出x,不会匹配到y,y只是一个条件),如:/Jack(?=Rose)/能够匹配到"JackRose"中的"Jack"(?<=y)x:后行断言,匹配x当且仅当x前面是yx(?!y):正向否定断言,仅当x后面不跟着y时匹配x,如:/\d*(?!\.)/即匹配后面没有小数点的数字,如"123.456"中能够匹配到"12"(?<!y)x:反向否定,仅当x前面不是y时匹配x
- 特殊元字符!:
\d:匹配一个数字,等价于字符集[0-9]\D:匹配一个非数字字符, ===> [^0-9]\f:匹配一个换页符\n:换行符\r:回车符\s:匹配一个空白字符,包括空格、制表符(tab)、换页符与换行符\S:匹配一个非空白字符\w:匹配一个单子字符(字母、数字、或下划线) ===> [A-Za-z0-9_]\W:匹配一个非单子字符 ===> [^A-Za-z0-9_]
- 基本元字符:
- 普通字符:
a-z、A-Z、0-9、空格等- 任何非特殊字符的字符(中文、日文、韩文等)
- 各种字节符(正则匹配会以字节为单位,如
/[\u4e00-\u9fa5]/匹配所有汉字
- 特殊元字符
- 适用场景:多种数据源输入


