- @符号
c#字符串前使用@符号,“@”表示,跟在它后面的字符串是个“逐字字符串”。
1 string x="D:\My Huang\My Doc"; 2 string y = @"D:My HuangMy Doc"; //等效
- 基本语法
d 0-9数字 D d的补集,即所有非数字的字符 w 单词字符,包括:大小写字符,0-9数字,下划线 W w的补集 s 空白字符 S s的补集 . 除换行符 外的所有字符 [...] 匹配[]内列出的所有字符 [^...] 匹配非[]内列出的所有字符 (...) 匹配组合,记录 (?:...) 匹配组合,非记录 - 定位
^ 字符串开始 $ 字符串结束 匹配一个单词的边界 B 匹配一个非单词边界 - 重复描述字符
{n} 匹配前面的字符n次 {n,} 匹配前面的字符大于等于n次 {n,m} 匹配前面的字符n到m次 ? 0到1次 + 1到多次 * 0到多次 - 组与非捕获组
正则表达式引擎会记忆"()"中匹配到的内容,作为一个组,并且可以通过索引的方式进行引用。表达式中的"1",用于反向引用表达式中出现的第一个组
1 string x = "Find somebody to love me, Find somebody to love"; 2 Regex r = new Regex(@"^Find ([a-z]{8}) to ([a-z]{4}) me, Find 1 to 2$"); 3 // r.Matches(x).Count --> 1 4 // Groups[0]是整个匹配的字符串,Groups[1]是组内的内容 5 // r.Matches(x).Groups[1].Value --> somebody 6 7 Regex r2 = new Regex(@"^Find (?<group1>[a-z]{8}) to ([a-z]{4}) me, Find 1 to 2$"); 8 // r2.Matches(x).Groups["group1"].Value 9 10 string y = "Find somebody somebody"; 11 regex r3 = new Regex(@"(?<g1>[a-z]+) 1"); 12 if (r3.IsMatch(y)) 13 { 14 y = r3.Replace(y, "${g1}"); 15 }
- 贪婪与非贪婪
在*,+符号后添加?,可以将匹配模式改成非贪婪 - 忽略大小写
Regex reg = new Regex(regPattern, RegexOptions.IgnoreCase);