. $ ^ { [ ( | ) * + ? \
[character_group] 匹配 character_group中的任何单个字符。
[^character_group] 匹配不在character_group中的任意单个字符匹配。
[first-last] 匹配从first到last的范围中的任意单个字符匹配。
. 匹配除\n之外的任意单个字符。
\w 匹配任何单词字符,等同于[A-Za-z0-9_]。
\W 匹配任何非单词字符。
\s 匹配任何空白字符。
\S 匹配任何非空白字符。
\d 匹配任何十进制数字。
\D 匹配不是十进制数的任意字符。
^ 默认情况下,必须从字符串的开头开始匹配;在多行模式中,必须从该行的开头开始。
$ 默认情况下,匹配必须出现在字符串的末尾,或在字符串末尾的 \n 之前;在多行模式中,必须出现在该行的末尾之前,或在该行末尾的 \n 之前。
分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。
(子表达式) 捕获匹配的子表达式并将其分配到一个从 1 开始的序号中。
(?<名称>子表达式) 将匹配的子表达式捕获到一个命名的组中。
var match = Regex.Match(input, "%(?<name>.+)%");
if (match.Success)
{
cardNo = match.Groups["name"].Captures[0].Value;
}(?=子表达式) 零宽度,表达式后面匹配。
(?!子表达式) 零宽度,表达式后面不匹配。
(?<=子表达式) 零宽度,表达式前面匹配。
(?<!子表达式) 零宽度,表达式前面不匹配。
零宽度:子表达式只做匹配,结果并不包含在父表达式匹配结果中。
* 匹配上一个元素零次或多次。
+ 匹配上一个元素一次或多次。
? 匹配上一个元素零次或一次。
{n} 匹配上一个元素恰好 n 次。
{n,} 匹配上一个元素至少 n 次。
{n,m} 匹配上一个元素至少 n 次,但不多于 m 次。
*? 匹配上一个元素零次或多次,但次数尽可能少。
+? 匹配上一个元素一次或多次,但次数尽可能少。
?? 匹配上一个元素零次或一次,但次数尽可能少。
{n,}? 匹配上一个元素至少 n 次,但次数尽可能少。
{n,m}? 匹配上一个元素的次数介于 n 和 m 之间,但次数尽可能少。
| 匹配以竖线 | 字符分隔的任何一个元素。
$number 包括替换字符串中的由 number标识的捕获组所匹配的最后一个子字符串,其中 number 是一个十进制值。
${name} 包括替换字符串中由 (?<name>) 指定的命名组所匹配的最后一个子字符串。
var result = Regex.Replace(input, "URI=\"(?<uri>.+)\"", match =>
{
var uri = match.Groups["uri"].Captures[0].Value;
return $"URI=\"{uri}\"";
});