2015-05-25 3 views
4

У меня есть следующий Regex, который я использую для подсветки синтаксиса:Подвыражения внутри Regex

static Regex inQuotes = new Regex("(\"|\').*(\"|\')", RegexOptions.Compiled); 

Однако, есть проблема. Всякий раз, когда я сталкиваюсь с текстом вроде:

"text_example1' или 'text_example2"

он фактически изменяет цвет текста, потому что эти два случая рассматриваются матч. Я хочу изменить это Regex таким образом, чтобы я мог заменить второй (\"|\') чем-то другим.

Я думал о подвыражении и мне было интересно, о том, как я могу изменить его так, что как только я получаю первый матч (" или '), то последний матч должен быть таким же, как в первом матче вместо " или ' ,

+0

У вас есть какой-либо убежали объекты внутри процитированных строк? –

ответ

4
(\"|\').*?(\1) 

Вы можете использовать backreferencing здесь, чтобы добиться того, что вы want.Also сделать ваше выражение non greedy.*? от жадного .* .Увидь демо.

https://regex101.com/r/nM7nT5/3

string strRegex = @"(\""|\').*?(\1)"; 
+0

Мне пришлось написать '\\ 1', потому что я получал« Ошибка Unrecognized escape-последовательности ». Кроме этого, это кажется идеальным. Благодаря! –

+0

@OC_ это будет '\\ 1', если вы не используете' @ 'или дословный режим – vks

+2

@vks:' string strRegex = @ "([" "']). *? (\ 1)"; ' –

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