我无法找出我在Regex.Match方法上遇到的简单编译错误。
错误说
无法在静态上下文中访问非静态方法“IsMatch”

错误文本本身是混乱的,因为我正在调用的方法是Regex类的静态方法,而错误说我不能在statc上下文中访问non-static方法。
我的上下文也不是static,因为调用Regex.IsMatch函数的方法是一个非静态方法,甚至类也是非静态的。
这个错误让人困惑!
当我用Regex类的实例调用替换调用时,它会工作,如下所示
new Regex(@"/^(?:2[89]|[3-9]\d)\d{6,}$/").IsMatch(@"/^(?:2[89]|[3-9]\d)\d{6,}$/")
但是我完全不明白为什么我不能调用类的静态方法!
发布于 2022-09-19 14:11:46
没有只接受一个参数的static方法IsMatch。
IsMatch(string input, string pattern)是static,但是对于一个已经给出模式的实例,IsMatch(string input)不是并且需要被调用(因为,考虑一下,如果这个方法是static,并且我们只向它提供一个输入字符串,那么会使用什么模式?)
在这里中可以找到所有可用的重载。
发布于 2022-09-19 14:14:05
您需要向方法提供一个输入字符串。
但是,您还需要修改regex并删除必须用作regex分隔符字符的前导斜杠和尾斜杠。这些斜杠被视为模式的一部分,并将阻止正则表达式匹配任何字符串。请记住,正则表达式是用C#中的字符串字面值( string literals,"...")定义的,而不是用regex文本(/.../)定义的。
所以你需要用
Regex.IsMatch(item.HSCode, @"^(?:2[89]|[3-9]\d)\d{6,}$")另外,考虑使用[0-9]而不是\d,如果您只期望输入ASCII位数,请参阅D效率低于[0-9]。
https://stackoverflow.com/questions/73774704
复制相似问题