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

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

"что-нибудь, избежало двойных кавычек: \", да "здесь ничего не должно совпадать.

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

Я думаю

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

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

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

Ответы [ 2 ]

32 голосов
/ 29 августа 2009

Нет необходимости смотреть сзади:

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

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

3 голосов
/ 29 августа 2009

«Не предшествует» переводится как «отрицательный взгляд назад», так что вы хотите (?<!\\)".

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

Подобные вещи объясняют, почему регулярные выражения не заменяют парсеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...