先介绍下基本的概念,可能看起来这些概念性的东西不是太懂,但是这个还是要记一下的,为以后复杂的regex打下基础.
(?<=EXP)
逆序肯定环视,表示所在位置左侧能够匹配EXP
(?<!EXP)
逆序否定环视,表示所在位置左侧不能够匹配EXP
(?=EXP)
顺序肯定环视,表示所在位置右侧能够匹配EXP
(?!EXP)
顺序肯定环视,表示所在位置右侧不能够匹配EXP
实例:String: a1b2c3d
l 要匹配字母后面是数字2的字母
Regex:[a-z](?=2)
结果:b
l 要匹配字母前面是数字2的字母
Regex: (?<=2)[a-z]
结果:c
l 要匹配后面不是数字2的字母
Regex: [a-z](?!2)
结果:a c d
l 要匹配前面不是数字2的字母
Regex: (?<!2)[a-z]
结果:a b d
最后说下[]这个问题
[]支持用连字符”-”连接两个字符,来表示一个字符的范围,例如[a-z]表示所有的大小英文字母[0-9]表示0到9所有的数字
因为[]本身表示的就是字符之间的“或”的关系,因此在[]中使用”|”来表示“或”的关系是错误。
如果使用字符串间的或关系,那么就需要用到”()”了
因此在括号的使用上引入了非捕获组与捕获组的概念
关于记忆:
带有<符号的都是判断左侧的,<箭头不是向左嘛。
不带<箭头的都是判断右边的,正则匹配的顺序都是从左至右。