luckfyzh

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

reference

cnblog:正则表达式

cnblog:正则表达式-贪婪与非贪婪匹配

cnblog:python正则表达式指南

cnblog:正则表达式 \b

cnblog:正则表达式 \w \s \d \b

runoob:正则表达式-元字符

正则表达式用来定向选择某些内容,能省去不少手动选择的时间。比如我说我就比较常用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:仅匹配字符串开头;
  • \Z:仅匹配字符串末尾;
  • \b:代表单次的开头或者结尾,一般表示\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之外的字符。
posted on 2020-06-02 23:53  luckfyzh  阅读(176)  评论(0编辑  收藏  举报