Сопоставить строку с кавычками с регулярным выражением, но с исключениями
Здравствуйте, я пытаюсь проверить, нет ли строки в кавычках :T
или же :U
в конце.
(Я использую.Net Regex Class)
Что у меня есть
([\"'])(?:\\\1|.)*?\1
Это соответствует всем двойным и одиночным кавычкам, например "Test"
а также 'Test'
Где я застрял, я не хочу, чтобы регулярное выражение соответствовало "Test":U
или же 'Test':U
или же "Test":T
или же 'Test':T
2 ответа
Решение
Вы можете использовать следующее отрицательное утверждение и якоря:
([\"'])(?:\\\1|.)*?\1(?!:[TU])
^^^^^^^^
Посмотреть демо RegEX
Вам нужно добавить отрицательный прогноз в конце (?!:[UT])
, Кроме того, вы можете получить более эффективный шаблон, подобный этому:
string pattern = @"[""'](?>(?<="")[^""\\]*(?>\\.[^""\\]*)*""|(?<=')[^'\\]*(?>\\.[^'\\]*)*')(?!:[UT])";