在.Net里用正则的时候,有一些选项会给我们很大帮助,选项一般以一个字母表示,在使用的时候我们可以在构建Regex类的时候在构造方法里面用枚举或的方式传入, 如下面:
Regex r = new Regex(@"\w+", RegexOptions.Compiled | RegexOptions.IgnoreCase);
也可以直接放在正则表达式字符串的前面, 格式为
(?{选项列表}){正则表达式}
例如'(?i)abc'中的i表示忽略大小写,对应枚举RegexOptions.IgnoreCase。
下面介绍几个常用的选项:
1. 单行模式:n,RegexOptions.Singleline
这个表明.可以匹配换行符,一般用在全文匹配,可以在让正则表达式匹配多行文本。
2. 忽略大小写:i,RegexOptions.IgnoreCase
这个不用多解释, 例如'(?i)abc'可以同时批评abc和ABC
3. 只进行分组匹配:n,RegexOptions.ExplicitCapture
匹配不必要的内容会影响性能,我们一般用(?:{表达式})忽略匹配,不过写多了会影响正则的可读性,
用n选项使得正则表达式只匹配分组,也就是形如(?<name>{表达式})的部分。
4. 忽略空格,支持多行正则表达式和注释:x,RegexOptions.IgnorePatternWhitespace
用了这个选项,表达式中的空白将被忽略,我们只能用\s*或者\s+来匹配空格,同时表达式可以写多行,
支持#开头的注释, 例如:
Regex r = new Regex(@"(?six)
\w+ #名称
:
\w+ #值
");
这个选项我们一般不用,因为如果要用,我们就必须把正则中的空格全部换成\s或者\s+,比较麻烦。不过在正则表达式非常复杂的时候
分成多行并加上注释可以增强表达式的可读性。