Jade Dungeon

正则表达式基础

基本概念

语言组成部分

文字(literal)
视为普通文本(normal text characters)。
元字符(metacharacters)
具有特殊含意的特殊字符(special characters)。

转义

元字符可以通过\转为普通文字处理,但转义符号在字符组内是无效的。

常用元字符

一行的开始与结束

^开始、$结束。匹配的是位置,而不是字符。

字符数组(Character Classes)

字符数组的格式

使用结构体:[aeiou]

连字符表示范围
  • 连字符(-)表示范围:[0-9]
  • 连字符(-)只有在字符组内才作为元字符处理,其他地情况下只作为普通字符。
  • 连字符(-)在字符组的开头位置也作为普通字符处理:[-aeiou]
  • 转义符(\)号在字符组内作为普通字符处理。
问号和点号是普通字符

问号(?)和点号(.)是元字符,但是在字符组中是作为普通字符处理:[0-9A-Z_!.?]

排除字符
  • 排除符号(^)在字符组的开头位置时,表示整个字符数组为排除逻辑。
  • 排除符号(^)匹配的是「字符」而不是「位置」。因为字符组就表示占一个位置。 表示这个地方一定要有一个字符,而且不能是被排除的字符。

匹配任意字符

  • 点号.匹配任意字符,相当于占一个位置。
  • 如果在字符组内部则不当作元字符,而是普通字符处理。

多选分支结构

  • 或符号(|)表示分支结构:grey|gray相当于gr(a|e)y相当于gr[ea]y
  • 在字符组内部视为普通字符:gr[a|e]y
  • 多选分支结构「没有」像字符数组那样的排除功能。

忽略大小写

通常不由正则表达式语法提供,而是由程序指定。

单词分隔符

  • 开始(\<)和结束(\>
  • 匹配的是「位置」而不是「字符」。
  • 不同实现对单词分隔的定义不同,一般是把连续的字符和数字作为一个单词。 也不是所有的实现都带有分隔单词的功能。

重复与计数

  • 区间量词(interval quantifier){min,max}
  • 量词(quantifiers)可选项?相当于:{0,1}
  • 量词*相当于:{0,}
  • 量词+相当于:{1,}

反向引用

先匹配一个模式,再检查后面有没有出现同样的内容。

支持反向引用的工具可以记住括号匹配的内容,并按左括号(()出现的顺序标记为: \1\2\3\4……

例:

([a-z]) ([0-9]) \1 \2