正则表达式的语法(8)

例如,"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)

  匹配exp并且捕获到一个自动命名的组  

(?<name>exp)

  匹配exp并且捕获到组'name'  
(?=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不作为返回
 

(?!exp)

  exp不出现在声明右侧,但exp不作为匹配 

括号中的模式必须不出现在声明右侧 ,例如: 

输入: remember aqa bqu "abc"; 
正则:\b\w*q(?!u)\w*\b,返回“aqa”, 
意思为:匹配带q后面不是跟随u的单词
 

(?<!exp)

  exp不出现在声明左侧,但exp不作为匹配   

输入: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

  n  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgzsp.html