我希望代码:Regex.IsMatch(val.ToString(),"[{()}]")
每次值都是这些类型的括号时都会返回true。代码确实适用于那些括号 - {()}但不适用于那些 - []。
为什么会这样,我该如何解决?另外 - 当我尝试修复它并重新定位这样的支架时," {([])}"它给了我一个例外 - 为什么Brackets的位置很重要以及它如何影响代码?
答案 0 :(得分:2)
[...]
与一组字符匹配,但不包含[]
,因为它们是语法的一部分。你想要的是:
Regex.IsMatch(val.ToString(),@"[\[{()}\]]")
因为它还包含[
和]
(转义)
(要清楚:上面的语法匹配包含任何这些字符的字符串。它不会确保它包含适当的开/关字符)
答案 1 :(得分:1)
这可以通过比正则表达式更简单(并且更快,如果重要)的方法来解决。
硬编码字符范围:
switch (val.ToString()) {
case "{":
case "}":
case "(":
case ")":
case "[":
case "]":
// match!
break;
}
可配置的字符范围:
var chars = "[]{}()".ToCharArray();
var str = val.ToString();
if (str.Length == 1 && str.IndexOfAny(chars) == 0) {
// match!
}