正则表达式-基本概要

分类 正则 说明
特殊符号 \ 作为转义符或8进制数起始标记
| 或运算符,如(x|y)表示x或y.与[xy]存在混淆的地方.如car|t匹配car或t,而ca[rt]匹配car或cat.
^ 匹配待测字符段行首.如果设置了RegExp对象的Multiline属性,^也会匹配\n或\r之后的位置,即每一单独行首.
$ 匹配待测字符段行尾.如果设置了RegExp对象的Multiline属性,$也匹配\n或\r之前的位置,即每一行单独行尾.
? 当该字符紧跟在任何一个量词(*,+,?,{n},{n,},{n,m})后面时,匹配模式转换为非贪婪(懒惰)模式.非贪婪模式指在匹配过程中尽可能少的匹配所搜索的字符串,等价于str{0,1}.而默认的贪婪模式则会尽可能多的匹配所搜索的字符串,等价于str{1,}.
. 匹配除换行符之外的任何单个字符.
量词 * 量词,匹配前面的子表达式任意次.*等价于str{0,}
? 量词,匹配前面的子表达式零次或一次.?等价于str{0,1}
{n} 量词,n是一个非负整数,要匹配n次子表达式.str{n}表示连续的n个str.
{n,m} 量词,m和n均为非负整数,其中n<=m.最少匹配n次且最多匹配m次.str{n,m}表示连续的n或m个str.
分组 (pattern) ()是分组,(str)内的str是一个整体,与[str]所代表的字符集合不同.括号前没有加任何类似?=的修饰符则是获取匹配,匹配str并将匹配到的内容存储到Matches集合中,最大可存储9个.匹配到的每个结果都有一个从1开始到9的数字标识.可通过\num在后面的RegExp表达式中引用这个匹配结果.
获取匹配 (?:pattern) 非获取匹配,匹配str但不存储匹配结果.(?:pattern)还可用于组合字符,例如industr(?:y|ies)就可以替代industry|industries,这与industr[y(?:ies)]是等价的.
(?=pattern) 非获取匹配,具有肯定前瞻效应.前瞻实际上是正则里的一种修饰符,表示前面字符应为...的子串.如\w*c(?=d)匹配"abcde"结果为abc,\w*c(?=e)匹配"abcde"则匹配失败.前瞻不消耗字符,它仅仅是对字符的一种修饰,不是正则里的待匹配子串.
(?!pattern) 非获取匹配,具有否定前瞻效应.与(?=pattern)相反,(?!pattern)表示前面字符应不为...的子串.如\w*c(?!d)匹配"abcde"则匹配失败.
(?<=pattern) 非获取匹配,具有肯定后顾效应.(?<=pattern)表示后面字符应为...的子串.
(?<!pattern) 非获取匹配,具有否定后顾效应.(?<!str)表示后面字符应不为...的子串.
方括号集合 [xyz] 集合,它就像是一条变色龙,匹配时可以将它看做是[...]里的任一字符.如\w本质上就是[1-9a-zA-Z].
[^xyz] 负值集合,匹配时可以将它看做是除[...]里的所有字符外的任一字符.如[^a-z]匹配除小写字母外的任意字符.
[a-z] 字符范围式集合.可表示指定范围内的任意字符.连字符-只有出现在两个字符之间时才可以被视作范围分组,否则只是表示字符"-".
元字符 \b 匹配一个单词边界,单词边界指的是单词和空格间的界限位置,即待匹配单词与另外的单词间存在空格间隙.如er\b可以匹配"never"中的"er",但不能匹配"verb"中的"er".
\B 匹配非单词边界,即待匹配单词旁边又是一个单词,两者之间没有空格间隙.er\B能匹配"verb"中的"er",但不能匹配"never"中的"er".
\d 匹配一个阿拉伯数字字符.等价于[0-9].
\D 匹配一个非数字字符.等价于[^0-9].
\f 匹配一个换页符.等价于\x0c和\cL.
\n 匹配一个换行符.等价于\x0a和\cJ.
\r 匹配一个回车符.等价于\x0d和\cM.
\s 匹配任何不可见字符,包括空格,制表符,换页符等.等价于[\f\n\r\t\v].
\S 匹配任何可见字符.等价于[^\f\n\r\t\v].
\t 匹配一个制表符.等价于\x09和\cI.
\v 匹配一个垂直制表符.等价于\x0b和\cK.
\w 匹配包括下划线在内的任何单词字符.类似但不等价于[A-Za-z0-9_],这里的"单词"字符指的是使用Unicode字符集后所能表示的单词字符.
\W 匹配任何非单词字符.等价于[^A-Za-z0-9_].
\cx 匹配由x指明的控制字符.如\cM匹配Control+M即\r,\cI匹配control+I即\t,\cJ匹配control+J即\n.x的值必须为[A-Z]或[a-z]之一.否则c将被视为一个原义的"c"字符.
\xn 匹配\xn表示的十六进制转义值.其中,n必须为确定的两个数字长.如\x41匹配"A"."\x041"则等价于"\x04&1".
*注:16进制转义与8进制转义要注意区分开.
\num num是一个1-99的正整数,\num是对获取匹配中Matches集合存储的匹配结果的引用.由于只对后面已匹配过的结果作引用,故也称为向后引用.
\n 标识一个八进制转义值或作为一个向后引用.如果\n之前Matches集合获取了至少n个匹配结果,则n为向后引用.否则,如果n为八进制数字(0-7),则n为一个八进制转义值.
\nm 标识一个八进制转义值或一个向后引用.如果\nm之前Matches集合获取了至少nm个匹配结果,则nm为向后引用.否则如果\nm之前前Matches集合获取了至少n个匹配结果,则n为一个后跟数字m的向后引用.如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm.
\nml 如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则表示匹配八进制转义值nml.
\un 匹配n所表示的Unicode字符,其中n是四个十六进制数.如\u00A9匹配版权符号(©).
*注:某些正则匹配支持ASCII字符表示.
\p{P} 中括号内的"P"表示Unicode 字符集字符属性propety之一.
       L:字母;
    M:标记符号(一般不单独出现);
    Z:分隔符(如空格,换行等);
    S:符号(如数学符号,货币符号等);
    N:数字(如阿拉伯数字,罗马数字等);
       C:其他字符. *注:此语法部分语言不支持,如javascript.
其他 \<"word"\> 匹配单词"word"的开始(\<)和结束(\>).如正则表达式\

猜你喜欢

转载自blog.csdn.net/qq_39153720/article/details/122118840
今日推荐