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