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

求解释个正则表达式,该如何解决

2012-05-05 
求解释个正则表达式在看过客的正则笔记。有些不懂,请大家帮忙解释下。谢谢C# code需求1:验证字符串中任意位

求解释个正则表达式
在看过客的正则笔记。有些不懂,请大家帮忙解释下。谢谢

C# code
需求1:验证字符串中任意位置出现的连续四个数字在整个字符串中是否有重复,有重复为True,无重复为False。string[] test = new string[] { "1985aaa1985bb", "bcae1958fiefadf1955fef", "atijc1944cvkd", "df2564isdjfef2564d", "abc1234def5678ghi5678jkl" };Regex reg = new Regex(@"(\d{4})(?:(?!\1).)*\1");foreach (string s in test){      richTextBox2.Text += "源字符串:  " + s.PadRight(25, ' ') + "验证结果:  " + reg.IsMatch(s) + "\n";}/*--------输出--------源字符串:  1985aaa1985bb            验证结果:  True源字符串:  bcae1958fiefadf1955fef   验证结果:  False源字符串:  atijc1944cvkd            验证结果:  False源字符串:  df2564isdjfef2564d       验证结果:  True源字符串:  abc1234def5678ghi5678jkl 验证结果:  True*/需求1  Regex reg = new Regex(@"(\d{4})(?:(?!\1).)*\1");我的理解:(\d{4})4个连续的数字。(?:(?!\1).)*\1") 非捕获组 和顺序否定环视,作用就是取4个连续数字 后面的字符\1则是反向引用,目的是取 相同的4个数字不知道说的 对不对。。。


我的问题是,需求2:验证字符串中第一个出现的连续4个数字是否有重复,有重复为True,无重复为False。
C# code
Regex reg = new Regex(@"^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1");


这条正则 不知道怎么理解


[解决办法]
^(?:(?!\d{4}).)*
就是以非连续4个数字开头的任意字符,匹配0或多次,即允许连续四位数字前出现其他字符
[解决办法]
探讨
C# code

两个正则的区别

第一种:Regex reg = new Regex(@"(\d{4})(?:(?!\1).)*\1");
源字符串: abc1234def5678ghi5678jkl 验证结果: True

第二种: Regex reg = new Regex(@"^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1");
源字符串: ……

热点排行