reference
正则表达式用来定向选择某些内容,能省去不少手动选择的时间。比如我说我就比较常用notepad++来匹配字符串。对于一个正常的表达式总是应该包括两部分,操作内容与逻辑组件。比方说1+1=2这种,1就是操作数,是一个操作对象,+,=就是对操作数进行逻辑运算得到的结果。
正则表达式的逻辑组件有以下几种:
- {}:几种常见的用法:{n}表示匹配确定的n次,{n,}匹配至少n次,{n,m}匹配n~m次之间的次数。
- []:匹配括号当中的任何一个字符。如果是26个字母当中的任何一个就可以用[a-z],如果包含大小的字母应该使用[a-zA-Z]。
- ():就是一个范围,你可以用这个东西告诉匹配器你要匹配的是字符组还是单个字符,可以参见下面*的例子。
- |:两个匹配条件进行或运算,比如说z|food就是要么是z要么是food。
- ^:表示逻辑上取反。
- *:匹配0或多个在它之前的子表达式,和通配符*差不多,可以针对字符或者字符组。字符组可以出现零次也可以出现多次,比如说zoo*(注:可以匹配到zooo,匹配不到zoozoo),和(zoo)*(注:可以匹配到zoozoo)。
- +:同样匹配字符或者字符组,前面的字符或者字符组可以出现一次也可以出现多次。
- ?:匹配前面的子表达式零次或一次,其余特性与上面差不多。因为匹配次数相对较少,所以也被称为非贪婪匹配。在这种情况下,一般使用a.*?b这种格式。举个例子这个匹配式可以在aabab中匹配到aab和ab。
与位置相关
- ^:匹配一行的开始,比如说 ^zoo会匹配以zoo开始一行的情况;
- $:匹配行尾,注意用法是zoo$,匹配一行的结束;
- A:仅匹配字符串开头;
- :仅匹配字符串末尾;
- :代表单次的开头或者结尾,一般表示w与W之间的那个隐藏的位置。
- (?=pattern):正向肯定预查,
Windows(?=95|98|NT|2000)
"能匹配"Windows2000
"中的"Windows
",但不能匹配"Windows3.1
"中的"Windows
"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 - (?!pattern):正向否定预查,例如"
Windows(?!95|98|NT|2000)
"能匹配"Windows3.1
"中的"Windows
",但不能匹配"Windows2000
"中的"Windows
"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 - (?<=pattern):反向(look behind)肯定预查,
(?<=95|98|NT|2000)Windows
"能匹配"2000Windows
"中的"Windows
",但不能匹配"3.1Windows
"中的"Windows
"。
操作数组件主要是各种通配符,主要的意义广泛的通配符有以下几种:
- d:代表十进制的数字,等价于[0-9]
- D:匹配非数字,等于 [^0-9]
- s:代表换行,Tab或者空格
- S:代表非空白字符,也就是上面的字符取反
- w:匹配大小写字母,数字或者下划线或者汉字(匹配汉字可能会出现问题)。
- W:匹配w之外的字符。