选择可以在两种或者更多的模式中选择一个
如 (The|the|THE) 匹配 THE RIME OF THE ANCYENT MARINERE, IN SEVEN PARTS.
也可以使用 (?i)the 达到相同效果(不区分大小写)。
正则表达式中的选项
(?d) Unix中的行
(?i) 不区分大小写
(?J) 允许重复的名字
(?m) 多行
(?s) 单行(dotall)
(?u) Unicode
(?U) 默认匹配最短
(?x) 忽略空格和注释
(?-...) 复原或关闭选项
子模式(t|T)h(e|eir) 匹配the The their Their
子模式括号不是必须的
使用字符组的子模式\b[tT]h[ceinry]*\b 可以匹配thee thence之类的
使用\1 或$1可以后向引用之前用圆括号捕获的内容 (\d)\d\1 可以匹配101
也可以给分组命名,这样引用的时候就可以用名字而不是数字了
如 用(?<one>it is)命名 用$+{one} 引用
命名分组的语法
(?<name>...) 命名分组
(?name...) 另一种命名分组的方式
(?P<name>...) Python中命名分组
\k<name> Perl中引用
\k'name' Perl中引用
\g{name} Perl中引用
\k{name} .Net中引用
(?P=name) Python中引用
不想引用分组的时候可以使用非捕获分组,由于不在内存中存储所以性能较高
比如(the|The|THE)就是
也可以这么写(?i)(?:the)
也可以这样(?:(?i)the)
更推荐这样(?i:the)
另一种非捕获分组是原子分组,如果用正则表达式引擎进行回溯,这种分组就可以将回溯操作关闭,它只针对原子分组内的部分,而不针对整个正则表达式
如(?>the)
原子分组主要与性能有关,书上没有过多介绍