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