首页 新闻 赞助 找找看

请问这几个正则表达式是做什么用的啊?

0
悬赏园豆:5 [已解决问题] 解决于 2012-01-04 14:19

如图,我想知道这个语法怎么用,知道的朋友请用自己的话解释一下,并给上示例,这上面写的看不懂,麻烦了!!

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2011-11-18 13:35
< >
分享
最佳答案
1

我这里有以前学习的时候写的例子,你看一眼。第一个是关于组的,你先得了解怎么分组,然后就明白这个了,

   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、反向负声明(?<!)
//涵义:括号中的模式必须不出现在声明左侧
}

最后一个就是加注释而矣。

收获园豆:5
LCM | 大侠五级 |园豆:6876 | 2011-11-18 13:53

很好很强大

artwl | 园豆:16736 (专家六级) | 2011-11-18 16:38
其他回答(1)
0

上面的回答很全面

你那截图内容也不知道谁写的,真不专业,把exp看成一个自定义字符串,一切都围绕字符串进行匹配操作就是了

ERS | 园豆:728 (小虾三级) | 2011-11-18 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册