Что регулярное выражение соответствует чему-либо, кроме двойной цитаты, которой не предшествует обратная косая черта?

Другими словами, у меня есть строка вроде:

"ничего, избегали двойных кавычек: \", yep "ничего здесь НЕ подбирать.

Как мне сопоставить все внутри кавычек?

Я думаю

^"((?<!\\)[^"]+)"

Но моя голова вращается, должно ли это быть позитивным или негативным взглядом? Или это вообще работает?

Как мне сопоставлять любые символы, кроме двойной цитаты NOT, которой предшествует обратная косая черта?

Ответ 1

Нет необходимости в поиске:

"([^"]|\\")*"

Итак: сопоставлять кавычки и внутри них: каждый символ, кроме цитаты ([^"]) или, избегаемая цитата (\\"), произвольно много раз (*).

Ответ 2

"Не предшествует" переводит непосредственно на "негативный lookbehind", поэтому вам нужно (?<!\\)".

Хотя здесь вопрос, который может испортить ваш день: как насчет строки "foo\\"? То есть двойная кавычка, которой предшествуют две обратные косые черты, где в большинстве экранирующих синтаксисов мы хотели бы отрицать особое значение второй обратной косой черты, предшествуя ей первым.

Вот что такое, почему регулярные выражения не заменяют парсеров.