可以使用各种类别的字符,运算符和构造来定义正则表达式。
其中之一是分组构造。分组构造描述正则表达式的子表达式并捕获输入字符串的子字符串。下表列出了分组构造。
分组构造 | 描述 | 模式 | 匹配 |
---|---|---|---|
(子表达式) | 捕获匹配的子表达式并为其分配一个从零开始的序数。 | (\ 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 | “ A12xl A12XL a12xl”中的“ A12xl”,“ A12XL” |
(?=子表达式) | 零宽度正向超前断言。 | \ w +(?= \。) | “他是。狗跑了。太阳出来了。”中的“是”,“奔跑”和“熄灭”。 |
(?!子表达式) | 零宽度否定超前声明。 | \ b(?!un)\ w + \ b | “不确定使用”中的“确定”,“已使用” |
(?<=子表达式) | 零宽度正向后断言。 | (?<= 19)\ d {2} \ b | “ 1851 1999 1950 1905 2003”中的“ 51”,“ 03” |
(?<!子表达式) | 零宽度负向后声明。 | (?<!19)\ d {2} \ b | “结束”中的“结束”,“提供者”发送持久贷款人 |
(?>子表达式) | 非回溯(或“贪婪”)子表达式。 | [13579](?> A + B +) | “ 1ABB 3ABBC 5AB 5AC”中的“ 1ABB”,“ 3ABB”和“ 5AB” |