Ответ 1
Нет необходимости в поиске:
"([^"]|\\")*"
Итак: сопоставлять кавычки и внутри них: каждый символ, кроме цитаты ([^"]
) или, избегаемая цитата (\\"
), произвольно много раз (*
).
Другими словами, у меня есть строка вроде:
"ничего, избегали двойных кавычек: \", yep "ничего здесь НЕ подбирать.
Как мне сопоставить все внутри кавычек?
Я думаю
^"((?<!\\)[^"]+)"
Но моя голова вращается, должно ли это быть позитивным или негативным взглядом? Или это вообще работает?
Как мне сопоставлять любые символы, кроме двойной цитаты NOT, которой предшествует обратная косая черта?
Нет необходимости в поиске:
"([^"]|\\")*"
Итак: сопоставлять кавычки и внутри них: каждый символ, кроме цитаты ([^"]
) или, избегаемая цитата (\\"
), произвольно много раз (*
).
"Не предшествует" переводит непосредственно на "негативный lookbehind", поэтому вам нужно (?<!\\)"
.
Хотя здесь вопрос, который может испортить ваш день: как насчет строки "foo\\"
? То есть двойная кавычка, которой предшествуют две обратные косые черты, где в большинстве экранирующих синтаксисов мы хотели бы отрицать особое значение второй обратной косой черты, предшествуя ей первым.
Вот что такое, почему регулярные выражения не заменяют парсеров.