Regex 括号中带范围的正则表达式prob

Regex 括号中带范围的正则表达式prob,regex,Regex,我刚刚研究了正则表达式,我发现自己被下面的反例弄糊涂了 Regex pattern = new Regex("[^1]{1,}"); string challenge = "1234"; Console.WriteLine(pattern.IsMatch(challenge)); 它在控制台上返回“True”。 根据我的理解,它应该给出一个“False”结果,因为在挑战字符串中有一个“1”。 虽然这段代码运行良好 Regex pattern = new Regex("[^1-5]{1,}");

我刚刚研究了正则表达式,我发现自己被下面的反例弄糊涂了

Regex pattern = new Regex("[^1]{1,}");
string challenge = "1234";
Console.WriteLine(pattern.IsMatch(challenge));
它在控制台上返回“True”。 根据我的理解,它应该给出一个“False”结果,因为在挑战字符串中有一个“1”。 虽然这段代码运行良好

Regex pattern = new Regex("[^1-5]{1,}");
string challenge = "1234";
Console.WriteLine(pattern.IsMatch(challenge));
结果如预期的那样为“假”


有人知道第一个代码是怎么回事吗?

您没有锚定正则表达式。因此,允许它匹配质询字符串的任何子字符串。(子字符串“234”与表达式匹配。)请尝试以下操作:

Regex pattern = new Regex("^[^1]{1,}$");
第二个正则表达式无法匹配字符串,因为质询字符串的任何子字符串都不会满足表达式“除字符1、2、3、4和5外,至少有一个字符”的要求


简而言之:如果希望正则表达式与整个字符串匹配,请始终记住锚定表达式。

您没有锚定正则表达式。因此,允许它匹配质询字符串的任何子字符串。(子字符串“234”与表达式匹配。)请尝试以下操作:

Regex pattern = new Regex("^[^1]{1,}$");
第二个正则表达式无法匹配字符串,因为质询字符串的任何子字符串都不会满足表达式“除字符1、2、3、4和5外,至少有一个字符”的要求


简而言之:如果您希望正则表达式匹配整个字符串,请始终记住锚定表达式。您没有提到语言,我想它是C?如果isMatch()相当于python的pattern.search(string),那么它在“234”上匹配,所有这些都是“not 1”。

您没有提到该语言,我猜它是C?如果isMatch()相当于python的pattern.search(string),那么它将匹配所有“非1”的“234”。

[^1]{1,}
仅表示匹配不包含1且长度至少为1的任何字符序列


1234
包含不包含
1
且长度为3的序列
234

[^1]{1,}
仅表示匹配任何不包含1且长度至少为1的字符序列

1234
包含序列
234
,该序列不包含
1
,长度为3。

字符串部分
“234”
与正则表达式匹配。它是一个由1个或多个非1出现的字符串。

字符串部分
“234”
与正则表达式匹配。它是由1个或多个非1的出现组成的字符串