如何编写实用的正则表达式进行匹配和替换操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4582个文字,预计阅读时间需要19分钟。
正则表达式非常有用,能进行字符串查找、匹配、处理、替换和转换等操作。各种编程语言,如.NET的正则库、JDK的正则包、Perl和JavaScript等,都支持正则表达式。
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。而且各种语言都支持,例如.NET正则库,JDK正则包, Perl, JavaScript等各种脚本语言都支持正则表达式。下面整理一些常用的正则表达式。
字符
描述
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
(?i)te(?-i)st应该匹配TEst,但是不能匹配teST或TEST.
例如,"aabbc11asd", 返回结果为aa bb 11三组match
下例演示如何取得一个<a>标签对中的全部内容,即使其中包含别的HTML tag。
string newsContent = @"url:<a href=""1.html""><img src=""1.gif"">test<span style=""color:red;"">
Regex</span></a>.";
Regex regEnd = new Regex(@"<\s*a[^>]*>([^<]|<(?!/a))*<\s*/a\s*>",RegexOptions.Multiline);
目的:匹配 关键字="",例如获得关键字keyword,value;获得等于的值abc和test
表达式:string (?<x>[^=]*?) *= *(?<y>[^;]*?);
代码:
private void ParseKeywords(string input) { System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(input, @"string (?<x>[^=]*?) *= *(?<y>[^;]*?);"); if (mc != null && mc.Count > 0) { foreach (System.Text.RegularExpressions.Match m in mc) { string keyword = m.Groups["x"].Value; string value = m.Groups["y"].Value; } } }
截图:
2. 匹配并替换
输入:public <%=classname%>Extension : IExt
目的:匹配 <%= %>中间的classname并替换
表达式:<%=.*%>
代码:
private string Replace(string input) { return Regex.Replace(input, @"<%=.*%>", new MatchEvaluator(RefineCodeTag), RegexOptions.Singleline); } string RefineCodeTag(Match m) { string x = m.ToString(); x = Regex.Replace(x, "<%=", ""); x = Regex.Replace(x, "%>", ""); return x.Trim() + ","; }
截图:
正则表达式选项RegexOptions:
ExplicitCapture
只有定义了命名或编号的组才捕获
多行模式,其原理是修改了^和$的含义
单行模式,和MultiLine相对应
正则表达式替换的其他功能:
这段代码返回的是 “01 012 03 05”
就是说,对组一的每个匹配结果都用"0$1"这个表达式来替换,"0$1"中"$1"由组1匹配的结果代入
public static void Main()
{
string s = "1 12 3 5";
s = Regex.Replace(s,@"(\d+)(?#这个是注释)","0$1",RegexOptions.Compiled|RegexOptions.IgnoreCase);
Console.WriteLine(s);
Console.ReadLine();
}
${name}
把匹配的组名为"name"的组替换成表达式,
上例的Regex expression改成@"(?<name>\d+)(?#这个是注释)"后面的替换式改为"0${name}"结果是一样的
$$
做$的转义符,如上例表达式改成@"(?<name>\d+)(?#这个是注释)"和"$$${name}",则结果为"$1 $12 $3 $5"
3. 匹配URL中文件名
输入:www.jb51.net/page1.htm
目的:从URL地址中提取文件名
表达式:s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2") ;
代码:
string s = "www.jb51.net/page1.htm";
s = s.replace(/(.*\/){0,}([^\.]+).*/ig, "$2") ;
截图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计4582个文字,预计阅读时间需要19分钟。
正则表达式非常有用,能进行字符串查找、匹配、处理、替换和转换等操作。各种编程语言,如.NET的正则库、JDK的正则包、Perl和JavaScript等,都支持正则表达式。
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。而且各种语言都支持,例如.NET正则库,JDK正则包, Perl, JavaScript等各种脚本语言都支持正则表达式。下面整理一些常用的正则表达式。
字符
描述
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
(?i)te(?-i)st应该匹配TEst,但是不能匹配teST或TEST.
例如,"aabbc11asd", 返回结果为aa bb 11三组match
下例演示如何取得一个<a>标签对中的全部内容,即使其中包含别的HTML tag。
string newsContent = @"url:<a href=""1.html""><img src=""1.gif"">test<span style=""color:red;"">
Regex</span></a>.";
Regex regEnd = new Regex(@"<\s*a[^>]*>([^<]|<(?!/a))*<\s*/a\s*>",RegexOptions.Multiline);
目的:匹配 关键字="",例如获得关键字keyword,value;获得等于的值abc和test
表达式:string (?<x>[^=]*?) *= *(?<y>[^;]*?);
代码:
private void ParseKeywords(string input) { System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(input, @"string (?<x>[^=]*?) *= *(?<y>[^;]*?);"); if (mc != null && mc.Count > 0) { foreach (System.Text.RegularExpressions.Match m in mc) { string keyword = m.Groups["x"].Value; string value = m.Groups["y"].Value; } } }
截图:
2. 匹配并替换
输入:public <%=classname%>Extension : IExt
目的:匹配 <%= %>中间的classname并替换
表达式:<%=.*%>
代码:
private string Replace(string input) { return Regex.Replace(input, @"<%=.*%>", new MatchEvaluator(RefineCodeTag), RegexOptions.Singleline); } string RefineCodeTag(Match m) { string x = m.ToString(); x = Regex.Replace(x, "<%=", ""); x = Regex.Replace(x, "%>", ""); return x.Trim() + ","; }
截图:
正则表达式选项RegexOptions:
ExplicitCapture
只有定义了命名或编号的组才捕获
多行模式,其原理是修改了^和$的含义
单行模式,和MultiLine相对应
正则表达式替换的其他功能:
这段代码返回的是 “01 012 03 05”
就是说,对组一的每个匹配结果都用"0$1"这个表达式来替换,"0$1"中"$1"由组1匹配的结果代入
public static void Main()
{
string s = "1 12 3 5";
s = Regex.Replace(s,@"(\d+)(?#这个是注释)","0$1",RegexOptions.Compiled|RegexOptions.IgnoreCase);
Console.WriteLine(s);
Console.ReadLine();
}
${name}
把匹配的组名为"name"的组替换成表达式,
上例的Regex expression改成@"(?<name>\d+)(?#这个是注释)"后面的替换式改为"0${name}"结果是一样的
$$
做$的转义符,如上例表达式改成@"(?<name>\d+)(?#这个是注释)"和"$$${name}",则结果为"$1 $12 $3 $5"
3. 匹配URL中文件名
输入:www.jb51.net/page1.htm
目的:从URL地址中提取文件名
表达式:s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2") ;
代码:
string s = "www.jb51.net/page1.htm";
s = s.replace(/(.*\/){0,}([^\.]+).*/ig, "$2") ;
截图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

