正则表达式分组构造名为何能取数字

lifanghui1 2011-12-29 05:05:11
msdn中描述

反向引用引用组的最近的定义(当从左到右匹配时,最靠近左侧的定义)。具体地讲,就是当组建立多个捕获时,反向引用引用最近的捕获。例如,(?<1>a)(?<1>\1b)* 使用捕获模式 (a)(ab)(abb) 来匹配 aababb。循环限定符不清除组定义。

红色部分测试过有错误,如果<1>是分组构造名的话,应该是不能取数字的。
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2011-12-30
  • 打赏
  • 举报
回复
别结贴,这个你所谓错误的表达式我还没研究明白。谁给解释下那个红色的匹配过程是如何的?
lifanghui1 2011-12-30
  • 打赏
  • 举报
回复
表达式 \1 到 \9 总是指反向引用,而不是八进制代码。多位表达式 \10 和更高位表达式在具有与该数字对应的反向引用时被视作反向引用;
lifanghui1 2011-12-30
  • 打赏
  • 举报
回复
补充
"(?<1>a)(?<1>\1b)*";
(?<1>a)匹配"aababb"中a,
(?<1>\1b)匹配"aababb"中ab
*匹配abb
lifanghui1 2011-12-30
  • 打赏
  • 举报
回复
string pattern = @"(?<1>a)(?<1>\1b)*";
string input = "aababb";
//
Match m = Regex.Match(input, pattern);
if (m.Success == true)
Console.WriteLine("Input: \"{0}\" \nMatch: \"{1}\"", input, pattern);
else
Console.WriteLine("Match failed.");
}
程序没有问题,用@作原义解释。
苦苦的潜行者 2011-12-29
  • 打赏
  • 举报
回复

msdn那段说明,简直是让人恼火,,,,,

求大神解释吧,
pmars 2011-12-29
  • 打赏
  • 举报
回复
那个数字应该是一个字符串吧。。。
需要用 m.Groups["1"].Value
而数字的,。。。。。
qldsrx 2011-12-29
  • 打赏
  • 举报
回复
数字是自动编号用的,另外你这里怎么连续出现2个数字?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧