首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

初学正则表达式 疑惑

2011-12-26 
初学正则表达式 困惑C# codestatic void Main(){Regex r new Regex(i(n))Match mc r.Match(machin

初学正则表达式 困惑

C# code
        static void Main()        {            Regex r = new Regex("i(n)");            Match mc = r.Match("maching");            GroupCollection gr = mc.Groups;            for (int i = 0; i < gr.Count; i++)            {                Group g = gr[i];                Console.WriteLine("{0}:{1}", g.Value, g.Index);            }


这段代码是怎么工作的?为什么找in却找出来in和n呢?


[解决办法]
Regex r = new Regex("i(n)");
换成

Regex r = new Regex("in");

就行了!
[解决办法]
Regex r = new Regex("i(n)");
这个正则式会匹配两个分组,第一个分组就是整个表达式所匹配的,第二个就是匹配你的小括号内匹配的分组
如果你只想匹配in,则取消第二个分组就可以了,也就是去掉n的小括号,即Regex r = new Regex("in");

[解决办法]
去看一下捕获组的概念

在匹配成功的情况下,Groups[0]永远是整个正则表达式所匹配到的内容,在你的例子里就是in

其它非命名捕获组是从1开始按顺序编号的,在你的例子里,还有一个捕获组,那就是(n),它匹配的内容n保存在Groups[1]里

此时的gr.Count是等于2的

热点排行