2011-02-21 6 views
13

Что такое регулярное выражение, чтобы найти строки, начинающиеся с [и заканчивающиеся на]. Между [и] все виды персонажей прекрасны.RegEx Начинается с [и заканчивается на]

+0

Вы пытаетесь найти эти строки внутри большего текста? Если да, могут ли скобки быть вложенными? –

+0

Да, я пытаюсь найти струны в более крупном теле. Но я не ожидаю вложенных скобок. – KBBWrite

ответ

21

[ и ] специальные символы в регулярных выражениях, так что вам нужно, чтобы избежать их. Это должно работать для вас:

\[.*?\] 

.*? делает нежадным согласование любого характера. Нежелательный аспект гарантирует, что вы будете соответствовать [abc] вместо [abc]def]. Добавьте ведущий ^ и завершающий $, если вы хотите совместить всю строку, например. нет совпадения вообще в abc[def]ghi.

+1

Спасибо, Это сработало для меня. – KBBWrite

9
^\[.*\]$ 

будет соответствовать строке, которая начинается с [ и заканчивается ]. В C#:

foundMatch = Regex.IsMatch(subjectString, @"^\[.*\]$"); 

Если вы ищете для брекет-разделителями строк внутри длинных строк (например, найти [bar] в пределах foo [bar] baz), а затем использовать

\[[^[\]]*\] 

В C#:

MatchCollection allMatchResults = null; 
Regex regexObj = new Regex(@"\[[^[\]]*\]"); 
allMatchResults = regexObj.Matches(subjectString); 

Пояснение:

\[  # match a literal [ 
[^[\]]* # match zero or more characters except [ or ] 
\]  # match a literal ] 
+0

Я не уверен, что ваш ответ или ответ thecoop лучший, но я предполагаю, что ваш, потому что OP никогда не упоминал, что между [и] должны быть ЛЮБЫЕ символы, и поэтому ваш '*' лучше сочетается с '+ 'thecoop' + '. – Bazzz

7

Это должно работать:

^\[.+\]$ 

^ является 'началом строки'
\[ является сбежавшим [, потому что [это символ управления
.+ матчи всех строки длины> = 1 (. является «любой символ», + означает «совпадение предыдущего шаблона один или несколько раз»)
\] is escaped]
$ is 'end of strin г»

Если вы хотите, чтобы соответствовать [], а также, изменить + к * („соответствует ноль или более раз“)

Затем используйте Regex класс, чтобы соответствовать:

bool match = Regex.IsMatch(input, "^\[.+\]$"); 

или , если вы используете это несколько раз или в цикле, создайте экземпляр Regex для повышения производительности:

private static readonly Regex s_MyRegexPatternThingy = new Regex("^\[.+\]$"); 

bool match = s_MyRegexPatternThingy.IsMatch(input); 
+0

Рабочее выражение: \ [. *? \], Однако ваше описание тоже полезно – KBBWrite

1

Для скобок необходимо использовать escape-символ \.
Используйте .+, если вы хотите иметь по крайней мере 1 символ между скобками или .*, если вы принимаете эту строку: [].

^\[.*\]$ 
Смежные вопросы