62,072
社区成员
发帖
与我相关
我的任务
分享
需求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个数字
不知道说的 对不对。。。
Regex reg = new Regex(@"^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1");
^(?:(?!\d{4}).)*
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
你看 这个字符串1985aaa1985bb 也是 4个数字开头,可是验证结果为True。证明他匹配成功了
抓狂了
两个正则的区别
第一种:Regex reg = new Regex(@"(\d{4})(?:(?!\1).)*\1");
源字符串: abc1234def5678ghi5678jkl 验证结果: True
第二种: Regex reg = new Regex(@"^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1");
源字符串: abc1234def5678ghi5678jkl 验证结果: False
第一种: Regex reg = new Regex(@"(\d{4})(?:(?!\1).)*\1");
第二种: Regex reg = new Regex(@"^(?:(?!\d{4}).)*(\d{4})(?:(?!\1).)*\1");
^(?:(?!\d{4}).)*
^不是开始的意思么,我想了下 没法理解。。大家帮我下。谢谢