首页 > 代码库 > 正则表达式

正则表达式

 用途:

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 match30             }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 match23             //}24         }

 

 

基本语法,参考文章:

http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx

http://msdn.microsoft.com/zh-cn/library/vstudio/yd1hzczs.aspx

 

正则表达式