2015-10-19 2 views
0

мне нужно это регулярное выражение =\\\"([^\\]*)\\\" но Visual Studio говорит мне:Regex проблемы в .NET

parsing "=\"([^\]*)\"" - Unterminated [] set. 

Но если я с помощью этого регулярного выражения с пробелом после \\ как этот =\\\"([^\\ ]*)\\\" он работает, но оленья кожа найти Mathes как tag=\"String with space\". Кто-нибудь знает, как решить эту проблему?

+0

Что вы на самом деле пытаетесь сопоставить? – phuzi

ответ

1

Вы используете обычный строковый литерал, поэтому \\] означает \] для двигателя регулярных выражений. Ваша строка содержит [ (открытие символьного класса), но не имеет закрывающей.

Когда вы добавляете пробел, вы просто сопоставляете пробел с классом символов.

Чтобы соответствовать = следовали строка в кавычках, используйте

var rx = @"=""((?:[^""\\]*(?:\\.[^""\\]*)*))"""; 

См regex demo и an IDEONE demo.

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

Если вам не нужно, чтобы соответствовать C-подобные строки с сбежавших последовательностями, просто используйте

var rx = "=\"([^\"]*)\""; 

См this regex demo (я думаю, что это выглядит лучше с обычной строковой литерал -. Слишком много двойных кавычек)