正则表达式
标准字符集合
- \d :任意一个数字。0~9中的任意一个 (\D相反)
- \w : 任意一个字母、数字或者下划线(\W取反)
- \s : 空白符(制表符、空格符、换行符)
- . : 任意一个字符(换行符除外)[\s\S]可以表示任意字符
自定义字符集合
- [] :表示单个字符。例:[3-9]表示3到9之间任意一个数字
- [^] : 上面的取反
- [a-d[m-p]] :表示的是a到d并m到p,并集的意思。
- [a-z&&[def]] :表示的是a到z与def的交集,也就是def
这里特殊符号放于中括号中失去意义(’^’,’-'除外)
例:[\d.+]表示的是数字,小数点,+
量词:修饰匹配次数的符号(修饰前一个字符)
- {n} : 表示重复n次
- {n,m} : 表示重复至少n次,至多m次
- ‘?’ :代表0次或者1次 {0,1}
- ‘+’ :代表至少出现一次{1,}
- ‘*****’ : 代表出现或者不出现{0,}
匹配模式
-
贪婪模式:匹配的字符越多越好(默认是这种模式)
例:文本:1234 345324
正则表达式:\d{2-6}其匹配结果是:1234 345324
为什么不是12 34 34 53 24?这就是贪婪模式按最大限度的匹配
-
非贪婪模式:匹配的字符越少越好。表达方式’{}’ 后面加一个’?’。
字符边界:匹配的是位置而不是字符
-
^ : 表示字符串开始的地方匹配
-
$ : 表示字符串结束的地方匹配
-
\b :匹配一个单词的边界(前面的字符和后面的字符不全是\w(表示字符、数字或者下划线))
例:文本:abc abc123 222abc
正则表达式:abc 匹配结果:abc abc123 222abc(粗线部分)
正则表达式:abc\b 匹配结果:abc abc123 222abc
解析:第一个abc(c的前面是b 可以用\w表示 后面是空格 不可以用\w表示)其他同理
选择符和分组
- | :左右两边表达式"或"关系,匹配左边和右边
- () :将括号中的内容捕获
- 在被修饰匹配次数的时候,()中的表达式可作为整体被修饰
- 取匹配结果的时候,()中的表达式匹配到的内容看单独被得到
- 每一对()都会被分配一个编号,从左括号开始编号从1开始
反向引用\nnn
- 每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号
- 通过反向引用,可以对分组已捕获的字符串进行引用
例: 文本: dodo todo doto gigi
正则表达式:([a-z]{2})\1 匹配结果 dodo gigi
解析:括号中的表达式表示的是:任意两个从a到z的字母,用括号将匹配的结果捕获到,先保存。这个括号的编号是1,再通过反向引用\1 引用捕获的内容。所以整个表达式:两个字符串在重复一次。
零宽断言—对位置的匹配
只进行与表达式的匹配,匹配内容不计入最终的匹配结果。
判断当前位置的前后字符是否符合指定的条件。
- (?=exp) : 断言自身出现的位置的后面能匹配表达式exp
- (?<=exp) : 断言自身出现的位置的前面能匹配表达式exp
- (?!exp) :断言自身出现的位置的后面不能匹配表达式exp
- (?<!exp) : 断言自身出现的位置的前面不能匹配表达式exp
例: 文本 going12 eating2 doing3
正则表达式:[a-z] (?=\d+) 表示以任意数字结尾的单词
匹配结果:going eating doing