例如,"aabbc11asd", 返回结果为aa bb 11三组match
<(?<tag>[^\s>]+)[^>]*>.*</\k<tag>> 匹配成对的HTML标签,例如
(?!)
不出现,负声明
下例演示如何取得一个<a>标签对中的全部内容,即使其中包含别的HTML tag。
string newsContent = @"url:<a href=""https://www.jb51.net/article/1.html""><img src=""https://www.jb51.net/article/1.gif"">test<spancolor:red;"">
Regex</span></a>.";
Regex regEnd = new Regex(@"<\s*a[^>]*>([^<]|<(?!/a))*<\s*/a\s*>",RegexOptions.Multiline);
1. 匹配组
常用的组匹配:(实用)
(exp) (?<name>exp) (?!exp) (?<!exp)
(?=exp)
exp出现在声明右侧,但exp不作为匹配
括号中的模式必须出现在声明右侧,但不作为匹配的一部分 ,例如:
输入: public keywod string "abc";
正则:\b\w+(?=ing\b),返回“str”,
意思为:匹配以ing结束的单词,但ing不作为返回
(?<=exp)
exp出现在声明左侧,但exp不作为匹配
括号中的模式必须出现在声明左侧,但不作为匹配的一部分 ,例如:
输入: public remember string "abc";
正则:(?<=\bre)\w+\b,返回“member”,
意思为:匹配以re开头的单词,但re不作为返回
括号中的模式必须不出现在声明右侧 ,例如:
输入: remember aqa bqu "abc";
正则:\b\w*q(?!u)\w*\b,返回“aqa”,
意思为:匹配带q后面不是跟随u的单词
输入:public string keywod = "abc"; string value = "test";
目的:匹配 关键字="",例如获得关键字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