我这里有以前学习的时候写的例子,你看一眼。第一个是关于组的,你先得了解怎么分组,然后就明白这个了,
private void button2_Click(object sender, EventArgs e)
{
string s = "2005-2-21";
Regex reg = new Regex(@"(?<y>\d{4})-(?<m>\d{1,2})-(?<d>\d{1,2})", RegexOptions.Compiled);
Match match = reg.Match(s);
int year = int.Parse(match.Groups["y"].Value);
int month = int.Parse(match.Groups["m"].Value);
int day = int.Parse(match.Groups["d"].Value);
Console.WriteLine(year + "年" + month + "月" + day + "日");
// 上面所述的分组方式为 ?<组名>
// 也可以直接通过小括号进行分组,如上面的分组可写成如下
// new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})",RegexOptions.Compiled);
// 此时访问组因为没有组名,所以只能按序号访问:match.Groups[1].Value 起始序号为1
// 针对于(A|B),可以这样来定义以达到不捕获并保存它到Group集合中的目的--(?:A|B)。
}
第2到5个如下:
private void button4_Click(object sender, EventArgs e)
{
//以下几种组结构,括号中的Pattern都不作为匹配结果的一部分进行保存
//1、正声明(?=)
//涵义:括号中的模式必须出现在声明右侧,但不作为匹配的一部分
string s = "C#.net,VB.net,PHP,Java,JScript.net";
Regex reg = new Regex(@"[\w\#]+(?=\.net)", RegexOptions.Compiled);
MatchCollection mc = reg.Matches(s);
foreach (Match m in mc)
Console.WriteLine(m.Value);
Console.ReadLine();
//2、负声明(?!)
//涵义:括号中的模式必须不出现在声明右侧
//下例演示如何取得一个<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);
Console.WriteLine(regEnd.Match(newsContent).Value);
//Result: <a href="1.html"><img src="1.gif">test<span style="color:red;">Regex</span></a>
Console.ReadLine();
//3、反向正声明(?<=)
//涵义:括号中的模式必须出现在声明左侧,但不作为匹配的一部分
//4、反向负声明(?<!)
//涵义:括号中的模式必须不出现在声明左侧
}
最后一个就是加注释而矣。
很好很强大
上面的回答很全面
你那截图内容也不知道谁写的,真不专业,把exp看成一个自定义字符串,一切都围绕字符串进行匹配操作就是了