[英]regular expression “.*[^a-zA-Z0-9_].*”
当我尝试阅读有关C#中的正则表达式的更多信息时,我只想确定自己得出的结论。 对于以下表达式“。* [^ a-zA-Z0-9 _]。*”,开头和结尾处的“。*”没有用,对吗? 因为据我所知,“。*”表示零个或多个字符出现,但后跟“ [^ a-zA-Z0-9_]”表示除字母和数字的任何组合以外的任何字符,不区分大小写,使“。*”在“ [^ a-zA-Z0-9_]”之前和之后都无用,对吗?
这是我用来检查表达式是否匹配的代码
// Here we call Regex.Match.
Match match = Regex.Match("anytest#", ".*[^a-z A-Z0-9_].*");
//Match match = Regex.Match("anytest#", "[^a-z A-Z0-9_]");
// Here we check the Match instance.
if (match.Success)
Console.WriteLine("error");
else
Console.WriteLine("no error");
唯一的区别是结果中是否包含“空白字符”。
对于:
ab41--_71j
它将匹配:
1--_7
并且在开头和结尾都没有.*
时,它将匹配:
--_
只要有至少一个不是a-zA-Z0-9_的字符,任何字符串都将至少匹配一次.*[^a-zA-Z0-9_].*
正则表达式.*[^a-zA-Z0-9_].*
根据您对答案的当前最新评论,我了解到您实际上在使用:
^[a-zA-Z0-9]*$
仅当所有字符均为数字/字母时,这才匹配。 如果不匹配,则该字符串无效。
如果还希望允许_
字符,请使用:
^[a-zA-Z0-9_]*$
甚至可以缩短为:
^\\w$
通常,最好使正则表达式的Validate而不是Invalidate字符串。 它更有意义,更直观。
所以我的验证看起来像:
if (Regex.IsMatch("anytest#", "^\\w$"))
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Error");
}
另一个可能更快的选择:
if ("anytest#".ToCharArray().All(c => char.IsLetterOrDigit(c) || c == '_'))
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Error");
}
而且,如果您不希望包含“ _”,它甚至看起来会更好。
if ("anytest#".ToCharArray().All(char.IsLetterOrDigit))
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Error");
}
否,因为除了aZ
和0-9
之外还有其他字符。
该正则表达式匹配所有以任何字符开头,后接a-zA-Z0-9
并以任何字符结尾的字符串。 或者只是一个根本不包含a-zA-Z0-9
的字符串。
如果您保留.*
则只有一个正则表达式匹配一个完全不包含a-zA-Z0-9
的字符。
.*[^a-zA-Z0-9_].* matches for instance: ABC_ß_ABC
[^a-zA-Z0-9_] matches for instance: ß (and this regex just matches 1 character)
.*[^a-zA-Z0-9_].*
将匹配整个输入,只要输入中的某处有非字母数字/下划线。 [^a-zA-Z0-9_]
位于输入中的某个位置,则仅会匹配单个非字母数字/下划线字符(如果使用默认的贪婪匹配,则很可能是最后一个)。 您想要哪一个取决于输入,一旦发现输入中是否存在非字母数字/下划线字符,您将要做什么。
输入1: ABC_ß_ABC
输入2: ß
正则表达式1: .*[^a-zA-Z0-9_].*
表达式2: [^a-zA-Z0-9_]
两个输入都匹配正则表达式,
对于输入1
正则表达式1匹配9个字符
正则表达式2仅匹配1个字符
只在您实际要查找的正则表达式中包括这些令牌。 在您的情况下,您实际上并不关心在指定的排除字符类之前或之后是否还有其他字符。 在此之前和之后添加.*
不会改变匹配的成功,但是会使匹配更加复杂。 正则表达式已经可以在任何地方匹配,除非您以某种方式专门将其锚定,例如在开始时使用^
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.