正则表达式
2017-06-04 17:00 Dirichlet 阅读(209) 评论(0) 编辑 收藏 举报用途:
1. 判断给定的整个字符串是否满足某pattern。//Regex.IsMatch
2. 在给定的整个字符串中找出满足某pattern的所有字串。给定字符串里是否存在某字串满足某pattern。//Regex.Matchs,Regex.IsMatch
上述pattern就是正则表达式。
任何的pattern都要@修饰,比如@"^[^/:*?""<>|\r\n]{1,244}$",@"\d{2}-\d{5}"。
用途1)的pattern的首尾要有^,$ e.g. 文件夹名字的正则表达式 @"^[^/:*?""<>|\r\n]{1,244}$"
用途2)的pattern的首尾不能有^,$。
string input3 = "adf234-56789sdf123-76589asdf";
string pattern3 = @"\d{2}-\d{5}";
字串34-56789,23-76589都会搜索出来。
例子分析
1.
使用多线模式,其中 ^ 和 $ 匹配每行的开头和末尾,不是输入字符串的开头和末尾。
默认情况下,$ 仅与输入字符串的末尾匹配。 如果指定了 RegexOptions.Multiline 选项,它将与换行符 (\n) 或输入字符串的末尾匹配。 但是,它并不与回车符/换行符的组合匹配。 若要成功匹配它们,使用子表达式 \r?$ 只替代 $。当然最终的match结果不含^,$所匹配的字符。
下面例子来自http://msdn.microsoft.com/zh-cn/library/vstudio/yd1hzczs.aspx,但是稍作修改,因为windows下换行是由\r\n组成的,所以这里用WriteLine。
第一个 pattern = @"^(\w+)\s(\d+)$";显然不行。
$这里要匹配\n,而因为windows下换行是由\r\n组成的,所以pattern里还有要有个\r?,?必须加上,你不能假设换行肯定是由\r\n组成的。
一个缺点就是匹配的match.Value字符的最后有个\r.
1 static void Test3() 2 { 3 StringWriter writer = new StringWriter(); 4 writer.WriteLine("Joe 164"); 5 writer.WriteLine("Sam 208"); 6 writer.WriteLine("Allison 211"); 7 writer.WriteLine("Gwen 171"); 8 9 string input = writer.ToString(); 10 string pattern = @"^(\w+)\s(\d+)$"; 11 bool matched = false; 12 13 Console.WriteLine("Without Multiline option:"); 14 foreach (Match match in Regex.Matches(input, pattern)) 15 { 16 matched = true; 17 break; 18 } 19 20 if (!matched) 21 Console.WriteLine(" No matches."); 22 Console.WriteLine(); 23 24 // Redefine pattern to handle multiple lines. 25 pattern = @"^(\w+)\s(\d+)\r?$"; 26 Console.WriteLine("With multiline option:"); 27 foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Multiline)) 28 { 29 Console.WriteLine(match.Value); // print whole the match 30 } 31 }
例2:
http://zhidao.baidu.com/question/578743567.html?from=pubpage&msgtype=2
找出输入文本的非空的第一行。
1 static void Test4() 2 { 3 StringWriter writer = new StringWriter(); 4 writer.WriteLine(); 5 writer.WriteLine(); 6 writer.WriteLine(); 7 writer.WriteLine("Joe 164"); 8 writer.WriteLine("Sam 208"); 9 writer.WriteLine("Allison 211"); 10 writer.WriteLine("Gwen 171"); 11 12 string input = writer.ToString(); 13 14 // Redefine pattern to handle multiple lines. 15 string pattern = @"\b.+(?=(\r?\n))"; 16 Console.WriteLine("With multiline option:"); 17 18 Match mat = Regex.Match(input, pattern, RegexOptions.Multiline); 19 20 //foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Multiline)) 21 //{ 22 Console.WriteLine(mat.Value); // print whole the match 23 //} 24 }
基本语法,参考文章:
http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/vstudio/yd1hzczs.aspx