【转】正则应用实例,如将多个空格改为1个空格

正则应用实例  

 

 http://ityear.blog.163.com/blog/static/93301609200991653840662/
 

1. c#下将多个空格替换成一个:

using System.Text.RegularExpressions;
Regex regexStr = new Regex(@"( ){1,}");
key = regexStr.Replace(key, " ");

//@"( ){1,}" 表示从1开始,多个空格,即1个以上空格,即连着1个,2个,3个等,改为2的话即表示2个以上空格,这时不包括1个空格


 Regex regexStr = new Regex(@"( |,){1,}");
//连续多个空格或连续多个

 

2.判断url是否是http://aa.dichan.com 或者 http://aa.bb.dichan.com 格式,即,url中包含http:// 和.dichan.com 且.dichan.com前不可出现两个点,即不能出现如:http://aa.bb.cc.dichan.com


        url = url.ToLower();
        System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"http://([a-z1-9-_]{1,50}(\.[a-z1-9-_]{1,10})?)(\.)dichan(\.)com/(.*)");
        if (regex.Match(url).Success)
        {
            Response.Write("符合要求");
        }
        else
        {
            Response.Write("不符合要求");
        }

详细分解: [a-z1-9-_] 表示要求是a-z的字母,1-9的数字,"-"中杠和"_"下杠,除此以外的字符均不符合要求。
   {1,50} 表示前面的长度为1-50,即[a-z1-9-_]的长度为1-50。
   (\.[a-z1-9-_]{1,10})?) 表示一个点后面再接一次字符,[a-z1-9-_]{1,10}解释同上。?表示前面(\.[a-z1-9-_]{1,10})出现0次或一次,也就是表示可以有个点,也可以没有点。有点的话,点后面的字符的长度最大为10。

 

 

3.将http://news.dichan.com/20081120/abc.html 跳转至实际地址:http://news.dichan.com/2008/11/20/abc.html
    <RewriterRule>
        <LookFor>~/(\d{4})(\d{2})(\d{2})/(.*).html</LookFor>
        <SendTo>~/c/$1/$2/$3/$4.html</SendTo>
      </RewriterRule>

 


4. 下面例子中,先把<div class="digest">和</div>中的内容取出来,再把整个这一句删掉
string regex = @"<div.*?class=\s*(""|')?digest(""|')?>(?<hexintishi>(.|\n)*?)</div>";
MatchCollection mcXX = Regex.Matches(content, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in mcXX)
{
 if (m.Groups["hexintishi"].ToString().Length > 1)
 {
     hexintishi = m.Groups["hexintishi"].ToString();   
 }
}

            Regex regexStr = new Regex(@"<div.*?class=\s*(""|')?digest(""|')?>(?<hexintishi>(.|\n)*?)</div><br />");
            content = regexStr.Replace(content, "");

 


5.      //keywords为关键词,是要replace的字符串.
 //content为内容,将此内容中出现的关键词加上链接.
 //如果此关键词已经加上链接,则链接中的字符不再加链接.
 //如:关键词为:[房地产,地产],房地产已经加链接,那么地产就不再加链接,不然会出错.
 Regex regexStr1 = new Regex(@"( +| +|,+|,+)");   //一个或多个(空格,或,全角空格,或,逗号,或,全角逗号)
 if (keywords != null)
        {
            keywords = regexStr1.Replace(keywords, ",");  //替换为一个逗号
            string[] s12 = keywords.Split(',');
            for (int kk = 0; kk < s12.Length; kk++)
            {
                Regex re = new Regex("<a .*" + s12[kk] + ".*<\\/a>"); //判断此关键词是否已经在<a></a>中
                if (re.IsMatch(content)) { continue; } //如果在就跳过此关键词,匹配下一个.
                re = new Regex(s12[kk]);  //如果不存在.就重写下regex,再直接按关键词匹配

                content = re.Replace(content, "<a href=\"" + HttpUrl + "search.aspx?key=" + s12[kk] + "\" target=\"_blank\">" + s12[kk] + "</a>", 1);  //最后加1表示只匹配一次,即正文中出现多个房地产,也只给你一个加上链接.
            }
        }

 

 

 

 

特殊字符   说明     
  $   --   匹配输入字符串的结尾位置。如果设置了   RegExp   对象的   Multiline   属性,则   $   也匹配   '\n'   或   '\r'。要匹配   $   字符本身,请使用   \$。     
  (   )   --   标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用   \(   和   \)。     
  *   --   匹配前面的子表达式零次或多次。要匹配   *   字符,请使用   \*。     
  +   --   匹配前面的子表达式一次或多次。要匹配   +   字符,请使用   \+。     
  .   --   匹配除换行符   \n之外的任何单字符。要匹配   .,请使用   \。     
  [   --   标记一个中括号表达式的开始。要匹配   [,请使用   \[。     
  ?   匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配   ?   字符,请使用   \?。     
  \   将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,   'n'   匹配字符   'n'。'\n'   匹配换行符。序列   '\\'   匹配   "\",而   '\('   则匹配   "("。     
  ^   --   匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配   ^   字符本身,请使用   \^。     
  {   --   标记限定符表达式的开始。要匹配   {,请使用   \{。     
  |   --   指明两项之间的一个选择。要匹配   |,请使用   \|。

posted @ 2014-05-13 16:54  知不知道  阅读(1295)  评论(0编辑  收藏  举报