正则应用实例
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是否是 或者 格式,即,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(@"(.*)"); 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.将 跳转至实际地址:
<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' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 ^ -- 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 { -- 标记限定符表达式的开始。要匹配 {,请使用 \{。 | -- 指明两项之间的一个选择。要匹配 |,请使用 \|。