正则表达式
2021-04-03 17:29:51 0 举报
AI智能生成
正则表达式思维导图
作者其他创作
大纲/内容
【限定符】
(指定数量)
(指定数量)
【限定的类型】
(约束什么东西的数量)
(约束什么东西的数量)
字符+位置
字符如:"\d+",代表一个或多个数字
位置如:"\t*",代表零个或多个制表符
(不是每个位置,都适合加限定符,如"^")
(不是每个位置,都适合加限定符,如"^")
【分组】(如对一批字符/位置
进行数量限定,可使用分组)
进行数量限定,可使用分组)
"(\b\w+\b)+",
代表一个或多个单词
代表一个或多个单词
语法
"*":重复零次或更多次
"+":重复一次或更多次
"?":重复零次或一次
"{n}":重复n次
"{n,}":重复n次货更多次
"{n,m}":重复n次到m次
【分组】
(子表达式)
(子表达式)
语法
定义:"(exp)"
用途
【限定重复数量】
子表达式可以使用限定符,指定数量
子表达式可以使用限定符,指定数量
【反向引用】
(根据"\1"或"\k<keyName>",
引用括号内表达式匹配的实际文本,(如
(w+)匹配的内容为abc,则"\1"代表的
内容也为abc,而不是满足(w+)的其他条件)
(根据"\1"或"\k<keyName>",
引用括号内表达式匹配的实际文本,(如
(w+)匹配的内容为abc,则"\1"代表的
内容也为abc,而不是满足(w+)的其他条件)
【左括号索引序号引用】
如"(exp1(exp2))","\2"匹配第2个左括号对应的
表达式exp2实际匹配内容,依次类推。
如exp2匹配为abc,则\2就是abc
如"(exp1(exp2))","\2"匹配第2个左括号对应的
表达式exp2实际匹配内容,依次类推。
如exp2匹配为abc,则\2就是abc
【自定义组名】
通过"(?<key>exp)"或"(?'key'>exp)"定义分组的别名,
使用时,通过"\k<key>"或"\k'key'"来替代"\1"、"\2"等
通过"(?<key>exp)"或"(?'key'>exp)"定义分组的别名,
使用时,通过"\k<key>"或"\k'key'"来替代"\1"、"\2"等
【不捕获问题、不分配组号】
通过"(?:exp)"来取消分组的捕获和组号
通过"(?:exp)"来取消分组的捕获和组号
跳过该左括号对应的组号。通过类似"\1"
无法反向引用到该组。其他括号对应组号正常。
如"(?:123)(aa)\1",匹配到的内容为:123aaaa
无法反向引用到该组。其他括号对应组号正常。
如"(?:123)(aa)\1",匹配到的内容为:123aaaa
【限定符控制】
约束限定符的匹配规则
约束限定符的匹配规则
【贪婪】
尽可能多匹配
(如"^\d+",如"123"的匹配结果为"123")
尽可能多匹配
(如"^\d+",如"123"的匹配结果为"123")
默认此规则
【懒惰】
尽可能少匹配
(如"^\d+",如"123"的匹配结果为"1")
尽可能少匹配
(如"^\d+",如"123"的匹配结果为"1")
限定符后面加"?"
"*?":重复任意次,尽可能少匹配
"+?":重复1次或更多次,尽可能少匹配
"??":重复0次或1次,尽可能少匹配
"{n,m}?":重复n次到m次,尽可能少匹配
"{n,}?":重复n次以上,尽可能少匹配
【分支条件】关键字"|",如"exp2|exp3"
多种并行规则,满足任何一个规则即匹配
多种并行规则,满足任何一个规则即匹配
【例子】
表达式:"\d{3}|a{3}"即匹配"123",也匹配"aaa"
表达式:"\d{3}|a{3}"即匹配"123",也匹配"aaa"
【建议】为了可读性更好
如果表达式较为复杂,建议分支条件结合小括号来使用,如:"(exp2)|(exp3)"
如果表达式较为复杂,建议分支条件结合小括号来使用,如:"(exp2)|(exp3)"
【注意】
使用分支条件时,需注意各个条件的顺序,如果前面的条件匹配了,后面的就不再尝试匹配了。
如"\d{3}|\d{4}"对"1234"进行匹配的结果为"123",而不是"1234",因为前面的"\d{3}"已经满足条件
使用分支条件时,需注意各个条件的顺序,如果前面的条件匹配了,后面的就不再尝试匹配了。
如"\d{3}|\d{4}"对"1234"进行匹配的结果为"123",而不是"1234",因为前面的"\d{3}"已经满足条件
注释
【含义】:只是对表达式进行注释,不影响匹配条件
【语法】:"(?#注释内容)"
【例子】:"(?#连续数字)\d+"
递归匹配(待补充)
条件匹配(待补充)
其他(待补充)
字符+位置
【占位字符】
(最后匹配到的字符)
(最后匹配到的字符)
【元字符】
(字符集)
(字符集)
".":换行以外所有字符
"\w":字母、数字、下滑线
"\W":非字母、数字、下滑线
"\d":数字
"\D":非数字
"\s":任意空白字符(空格、tab、换行)
"\S":非空白字符(空格、tab、换行)
【自定义字符】
(非关键字+关键字转义)
(非关键字+关键字转义)
直接使用某个非元字符。如:"a"、"abc"
字符范围。
如:[abc]代表匹配a、b、c中的任意一个字符;
[*.+]代表匹配"*"、"."、"+"中的任意一个字符;
(关键字,不用加转移符号"\")
如:[abc]代表匹配a、b、c中的任意一个字符;
[*.+]代表匹配"*"、"."、"+"中的任意一个字符;
(关键字,不用加转移符号"\")
"[^a]":匹配a以外的任意字符
"[^abc]":匹配 a、b、c以外的任意字符
原字符转义字符。如:"\."、"\\w"、"\("(前面加"\"转义)
编码字符
16进制编码("\x"开头)
编号在 0 ~ 255 范围的字符,比如"\x20"表示空格
unicode编码("\u"开头)
任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示。
如汉字为:"[\u4e00-\u9fa5]";双字节字符为:"[^\x00-\xff]"
如汉字为:"[\u4e00-\u9fa5]";双字节字符为:"[^\x00-\xff]"
【零宽位置】
(边界,只匹配位置
,不作为匹配结果)
(边界,只匹配位置
,不作为匹配结果)
标准
"^":行开头
"$":行结尾
"\n":换行
"\r":回车
"\t":制表符
"\b":单词开头或结尾的位置,即单词的分界(如匹配一个单词:"\b\w+\b")
(前面的字符和后面的字符,不全是\w,即一个是\w,一个不是\w或不存在)
(前面的字符和后面的字符,不全是\w,即一个是\w,一个不是\w或不存在)
"\B":匹配非单词开头或结尾的位置
零宽断言
【正向零宽断言】
(匹配满足条件的位置)
(匹配满足条件的位置)
"xxx(?=yyy)":先行断言,匹配"后面满足条件yyy"的条件"xxx"
如:"123(?=a)",匹配后面是a的123
如:"123(?=a)",匹配后面是a的123
"(?<=yyy)xxx":后发断言,匹配"前面满足条件yyy"的条件"xxx"
如:"(?<=a)123",匹配前面是a的123
如:"(?<=a)123",匹配前面是a的123
【负向零宽断言】
(匹配不满足条件的位置)
(匹配不满足条件的位置)
"xxx(?!yyy)":先行断言,匹配"后面不满足条件yyy"的条件"xxx"
如:"123(?!a)",匹配后面不是a的123
如:"123(?!a)",匹配后面不是a的123
"(?<!yyy)xxx":后发断言,匹配"前面不满足条件yyy"的条件"xxx"
如:"(?<!a)123",匹配前面不是a的123
如:"(?<!a)123",匹配前面不是a的123
0 条评论
下一页