【问题标题】:Regex.IsMatch doesn't work as expectedRegex.IsMatch 无法按预期工作
【发布时间】:2015-01-24 08:55:37
【问题描述】:

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

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

【问题讨论】:

  • 你想达到什么目的?

标签: c# regex


【解决方案1】:

[...] 匹配一组字符,但不包括[],因为它们是语法的一部分。你想要的是:

Regex.IsMatch(val.ToString(),@"[\[{()}\]]")

因为它还包括[](转义)

(要清楚:上面的语法匹配包含 任何 个字符的字符串。它不能确保它包含适当的开始/结束字符)

【讨论】:

    【解决方案2】:

    这可以通过比正则表达式更简单(如果重要的话,更快)的方法来解决。

    硬编码的字符范围:

    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

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2014-12-09
      • 2016-01-13
      • 2020-09-21
      • 2011-08-17
      • 2012-04-29
      • 2021-08-12
      • 2019-02-04
      • 2014-12-02
      相关资源
      最近更新 更多