正则表达式记录

原创
2019/11/30 19:05
阅读数 268

正则表达式

转义字符

字符 解释
\n 换行符
\t 制表符
\\ 代表\本身
\^,\$,\.,\(,\),\{,\},\?,\+,\*,\|,\[,\] 匹配这些字符本身

标准字符集合

字符 解释
\d 任意一个数字,0~9中的任意一个
\w 任意一个字母或数字或下划线,也就是A~Z,a~z,0~9,_中任意一个
\s 包括空格、制表符、换行符等空白字符的其中任意一个
. 小数点可以匹配任意一个字符,但是不包括\n,如果要匹配包括\n在内的所有字符,一般用[\s\S]

除了“.”之外都区分大小写,大写就是相反的意思

自定义字符集合

字符 解释
[ab5@] 匹配a或b或5或@
[^abc] 匹配abc之外的任意一个字符
[a-z] 匹配a~z之间的任意一个字母
[^a-d0-3] 匹配a~d和0~3之外的任意一个字符

除了^-\之外的特殊符号,如果被包含在中括号中,则失去特殊意义

量词

字符 解释
{n} 表示匹配到n次
{m,n} 表示匹配m到n次,最少m,最大n
{n,} 表示至少匹配到n次
? 表示匹配到0次或1次,等价于{0,1}
+ 表示至少匹配到1次,等价于{1,}
* 表示不匹配或匹配任意次,等价于{0,}

默认量词匹配模式为贪婪模式,也就是能多匹配就多匹配,如果在量词后加上"?"则会更改为非贪婪模式,意思是满足最低匹配规则就停止继续匹配。

例如:"123456"如果是匹配"\d{2,6}"的话则会匹配到:"123456",如果是匹配"\d{2,6}?"的话则会分别匹配到"12","34","56"

位置匹配

字符 解释
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
\b 匹配一个单词的边界,在匹配中不光hello是一个单词,hello123也会被当作一个单词
(?=exp) 该位置后面会匹配到exp
(?<=exp) 该位置前面会匹配到exp
(?!exp) 该位置后面不会匹配到exp
(?<!exp) 该位置前面不会匹配到exp

位置匹配不会匹配到带有宽度的字符,而仅仅是匹配位置,可以理解成位置的逻辑判断

匹配模式

字符 解释
IgnoreCase 忽略大小写模式
SingleLine 单行模式,是否将整个字符视为一行,只有一个开头和结尾,同时"."可以匹配到"\n"
MultiLine 多行模式,每行字符都有独自的开头和结尾,此时如果要匹配绝对开头或结尾则需要使用"\A"和"\Z"代替"^"和"$"

不同软件或语言中匹配模式的英文单词不一定是"IgnoreCase"、"SingleLine"、"MultiLine",请根据实际情况作出判断(例如有时候忽略大小写的单词为CaseInsensitive,多行模式的英文单词为LineBreak),大多数情况下默认的匹配模式为:区分大小写、多行模式

分组和引用

字符 解释
| "与或非"中"或"的关系,表示满足左边或右边都会被匹配到
() 括号中的表达式作为一个整体,同时可以被引用
(?:exp) 括号中的表达式作为一个整体,但是不可以被引用

例如:

"goto gogo"这串字符

如果匹配 "[a-z]{2}" 的话,则会匹配到"go","to","go","go";

如果是匹配 "([a-z]{2})\1" 的话,则会匹配到:"gogo";

如果是匹配 "(?:[a-z]{2})\1" 的话,则什么都匹配不到。

引用可能会造成性能降低,所以尽可能的使用(?:exp)这种形式

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部