2015-01-24 5 views
0

Я хочу, чтобы код: Regex.IsMatch(val.ToString(),"[{()}]") возвращал true каждый раз, когда значение является скобкой этих видов. код работает над этими скобками - {()}, но не на тех - [].Regex.IsMatch не работает должным образом

Почему это и как я могу это исправить? также - когда я пытаюсь исправить это и переставить скобки как это »{([])}« это бросило мне исключение - почему положение скобок имеет значение и как это влияет на код?

+0

Что вы пытаетесь достичь? –

ответ

2

[...] соответствует набору символов, но не включает [], так как они являются частью синтаксиса. Чего вы хотите:

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

Поскольку он также включает в себя [ и ] (экранированием)

(Чтобы было ясно:. Выше синтаксис соответствует строке, которая содержит любой этих символов Это не убедитесь, что он содержит соответствующий символ открытия/закрытия)

+0

Спасибо большое! :) –

1

Это можно решить более простым (и более быстрым, если это имеет значение) подходом, чем регулярное выражение.

Hard кодировкой диапазон символов:

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

Смежные вопросы