C#中正则表达式的高级应用

1。在正则表达式中定义变量并调用:

using System;
using System.Text.RegularExpressions;

public class Test
{

    
public static void Main ()
    {

        
// Define a regular expression for repeated words.
        Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b",
          RegexOptions.Compiled 
| RegexOptions.IgnoreCase);

        
// Define a test string.        
        string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
        
        
// Find matches.
        MatchCollection matches = rx.Matches(text);

        
// Report the number of matches found.
        Console.WriteLine("{0} matches found.", matches.Count);

        
// Report on each match.
        foreach (Match match in matches)
        {
            
string word = match.Groups["word"].Value;
            
int index = match.Index;
            Console.WriteLine(
"{0} repeated at position {1}", word, index);   
        }
        
    }
    
}

其中?<word>定义了一个变量,之后的\k<word>调用自身定义的变量word。

2。好用的Regex.Replace 和Match.Result

这个例子实现输入的日期更改格式的功能,用正则表达式自动搜索字符串并替换,注意正则表达式中变量的使用。
public string MDYToDMY(string input) 

return Regex.Replace(input, 
"\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b"
"${day}-${month}-${year}"); 


Match.Result是返回一个可以带正则表达式中变量值的字符串。
public string Extension(string url) 

Regex r 
= new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/"
RegexOptions.Compiled); 
return r.Match(url).Result("${proto}${port}"); 

正则式官方详解:

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

posted @ 2008-02-19 11:51  小y  阅读(1897)  评论(0编辑  收藏  举报