标签:转义 存在 判断 net drivers options value xxx path
1.指定字符出现多次用 ([a-zA-Zxxx]+),不是 (a-zA-Zxxx)+,后面那个是这一组出现多次,对于贪婪模式来说可能有些问题
2.贪婪模式,最好后面跟着一个结束标识符
①. 测试,输出结果是1111。11。111。111111。 //贪婪模式,针对于这个对于这个正则(.)的尽可能多的去匹配,这一段字符都符合的就取下来 string msg = "1111。11。111。111111。"; //.+,默认按照贪婪模式来匹配,尽可能多的去匹配。 Match match = Regex.Match(msg, ".+"); Console.WriteLine(match.Value); Console.ReadKey(); ②1111。11。111。111111。,使用Match,\d+只匹配到1111,因为对于这个正则,第一个出现的1111,不会贪婪到最后,因为。不是数字,对于后面那段来说不匹配了 ③终止贪婪模式,结果是1 string msg = "1111。11。111。111111。"; //.+,默认按照贪婪模式来匹配,尽可能多的去匹配。 //当在“限定符”后使用?的时候,表示终止贪婪模式 //当终止贪婪模式之后,会按照指定正则尽可能少的匹配。 Match match = Regex.Match(msg, ".+?"); Console.WriteLine(match.Value); Console.ReadKey(); //注意:千万不要写成(.+)?,这样结果是1111。11。111。111111。,因为括号改变正则云算法优先级问题,先计算(.+)这个正则,所以全部匹配出来了,再计算?。除非是这样写(.+?) ④不要使用*,因为这个意思是零次或者多次,相当于{0,},会匹配不到结果的 string str = "abbb"; Match match = Regex.Match(str, ".*?"); Console.WriteLine(match.Value); Console.ReadKey(); ⑤ 结果是:1111。11。111。111111。 string msg = "1111。11。111。111111。"; Match match = Regex.Match(msg, ".+。"); Console.WriteLine(match.Value); Console.ReadKey(); ⑥结果是1111。,.+?阻止了贪婪模式,匹配到了1111,加上后面的。 string msg = "1111。11。111。111111。1。1。1。"; Match match = Regex.Match(msg, ".+?。"); Console.WriteLine(match.Value); Console.ReadKey(); ⑦结果是1111。11。111。111111。1。1。1。 string msg = "1111。11。111。111111。1。1。1。"; Match match = Regex.Match(msg, "(.+。)"); Console.WriteLine(match.Value); Console.ReadKey(); ⑧匹配名字,因为后面都有。句号,可用来作为标志的分隔符 string msg = "大家好。我们是A.B.C。我是A。我是B。我是C。我是XXX。我是X.X.X。我是★XX★。呜呜。fffff"; MatchCollection matches = Regex.Matches(msg, "我是(.+?)。"); foreach (Match item in matches) { Console.WriteLine(item.Groups[1].Value); } Console.ReadKey(); ⑨提取文件中的文件名 string path = @"C:\Windows\System32\drivers\etc\hosts"; //此处因为有“贪婪模式”的存在,所以正则表达式中的 \\ 肯定匹配的是文件路径中的最后一个 Match match = Regex.Match(path, @".+\\(.+)"); Console.WriteLine(match.Groups[1].Value); Console.ReadKey();
3..net默认使用的是Unicode匹配模式‘’
①结果是true,连全角符号都匹配 string msg = "123";//123 123 bool b = Regex.IsMatch(msg, @"\d+"); ②结果是false string msg = "123";//123 123 //这个可以准确判断是ASCII字符123,不包含unicode字符123,其实就是在输入法中使用“全角”输出123 bool b = Regex.IsMatch(msg, @"\d+", RegexOptions.ECMAScript); ③ true string msg = "abd097776_432ERWEWR__你好你好你好你好你好"; bool b = Regex.IsMatch(msg, @"^\w+$"); ④false string msg = "abd097776_432ERWEWR__你好你好你好你好你好"; bool b = Regex.IsMatch(msg, @"^\w+$", RegexOptions.ECMAScript);
4、 关于C#字符串中的\转义问题 与 正则表达式中的\的转义问题。
①//string reg = "\d"; //此时c#会认为\是一个字符串的转义符。 如: 此时运行完毕后其实就是正常字符 \d string reg = "\\\\d"; //此时c#会认为\是一个字符串的转义符。 bool b = Regex.IsMatch(@"\d", reg); //reg → \\d→ \d,2重转义 Console.WriteLine(b); 结果是true,reg 就是正常字符\\d,\\d转义前面的\就成普通的字符\d ② Console.WriteLine("a\\\\tb"); a\\tb
标签:转义 存在 判断 net drivers options value xxx path
原文地址:http://www.cnblogs.com/entclark/p/7899719.html