avatar
童琦杰
Jun 22, 2019Technology

正则表达式

转义字符

. $ ^ { [ ( | ) * + ? \

字符匹配

[character_group] 匹配 character_group中的任何单个字符。

[^character_group] 匹配不在character_group中的任意单个字符匹配。

[first-last] 匹配从firstlast的范围中的任意单个字符匹配。

. 匹配除\n之外的任意单个字符。

\w 匹配任何单词字符,等同于[A-Za-z0-9_]

\W 匹配任何非单词字符。

\s 匹配任何空白字符。

\S 匹配任何非空白字符。

\d 匹配任何十进制数字。

\D 匹配不是十进制数的任意字符。

定位点

^ 默认情况下,必须从字符串的开头开始匹配;在多行模式中,必须从该行的开头开始。

$ 默认情况下,匹配必须出现在字符串的末尾,或在字符串末尾的 \n 之前;在多行模式中,必须出现在该行的末尾之前,或在该行末尾的 \n 之前。

分组构造

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串

(子表达式) 捕获匹配的子表达式并将其分配到一个从 1 开始的序号中。

(?<名称>子表达式) 将匹配的子表达式捕获到一个命名的组中。

csharp
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}? 匹配上一个元素的次数介于 nm 之间,但次数尽可能少。

替换构造

| 匹配以竖线 | 字符分隔的任何一个元素。

替换

$number 包括替换字符串中的由 number*标识的捕获组所匹配的最后一个子字符串,其中 *number 是一个十进制值。

${name} 包括替换字符串中由 (?<name>) 指定的命名组所匹配的最后一个子字符串。

csharp
var result = Regex.Replace(input, "URI=\"(?<uri>.+)\"", match =>
{
    var uri = match.Groups["uri"].Captures[0].Value;
    return $"URI=\"{uri}\"";
});
© 2015-2022 tongqijie.com 版权所有沪ICP备17000682号