可以使用各种类别的字符,运算符和构造来定义正则表达式。
其中之一是分组构造。分组构造描述正则表达式的子表达式并捕获输入字符串的子字符串。下表列出了分组构造。
分组构造 | 描述 | 模式 | 匹配 | (子表达式) | 捕获匹配的子表达式并为其分配一个从零开始的序数。 | (\w)\1 | “ee”中的“deep” |
(?<名称>子表达式) | 将匹配的子表达式捕获到命名组中。 | (?<double>\w)\k<double> | “ee”中的“deep” |
(?<name1-name2>子表达式) | 定义平衡组定义。 | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | “3+2^((1-3)*(3-1))”中的“((1-3)*(3-1))” |
(?:子表达式) | 定义一个非捕获组。 | 写(?:行)? | “Console.WriteLine()”中的“WriteLine” |
(?imnsx-imnsx:子表达式) | 应用或禁用子表达式中的指定选项 | A\d{2}(?i:\w+)\b | “A12xlA12XLa12xl”中的“A12xl”,“A12XL” |
(?=子表达式) | 零宽度正向超前断言。 | \w+(?=\。) | “他是。狗跑了。太阳出来了。”中的“是”,“奔跑”和“熄灭”。 |
(?!子表达式) | 零宽度否定超前声明。 | \b(?!un)\w+\b | “不确定使用”中的“确定”,“已使用” |
(?<=子表达式) | 零宽度正向后断言。 | (?<=19)\d{2}\b | “18511999195019052003”中的“51”,“03” |
(?<!子表达式) | 零宽度负向后声明。 | (?<!19)\d{2}\b | “结束”中的“结束”,“提供者”发送持久贷款人 |
(?>子表达式) | 非回溯(或“贪婪”)子表达式。 | [13579](?>A+B+) | “1ABB3ABBC5AB5AC”中的“1ABB”,“3ABB”和“5AB” |