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