Regex.IsMatch无法按预期工作

时间:2015-01-24 08:55:38

标签: c# regex

我希望代码:Regex.IsMatch(val.ToString(),"[{()}]")每次值都是这些类型的括号时都会返回true。代码确实适用于那些括号 - {()}但不适用于那些 - []。

为什么会这样,我该如何解决?另外 - 当我尝试修复它并重新定位这样的支架时," {([])}"它给了我一个例外 - 为什么Brackets的位置很重要以及它如何影响代码?

2 个答案:

答案 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!
}

MSDN: String.IndexOfAny Method