Вы можете использовать положительный: 'назад
/\A"((?<=\\)"|[^"])*"\z/
Это именно то, что вы просили: «если двойные кавычки появляется внутри внешних двойных кавычках без обратной косой черты приставкой, это не соответствует.»
Некоторые комментарии:
\A
, \z
: Это матч только в начиная и конец строки. Таким образом, шаблон должен совпадать с строкой , а не ее частью. (?<=)
: Это синтаксис для положительного lookbehind; он утверждает, что шаблон должен соответствовать непосредственно перед текущей позиции. Итак, (?<=\\)"
соответствует «двойной кавычки, которой предшествует обратная косая черта». [^"]
: Это соответствует «любому символу, который не является обратным слэшем».
Одна точки об этом регулярном выражении, является то, что он будет соответствовать внутренней кавычке, который предшествует два обратные косой черты. Если это проблема, отправьте комментарий, и я исправлю это.
Если ваша версия Ruby, не имеет просмотра назад, вы могли бы сделать что-то вроде:
/\A"(\\.|[^"\\])*"\z/
Обратите внимание, что в отличие от первого регулярного выражения, это не считать двойной обратной косой черты, как избежать цитата (скорее, первая обратная косая черта ускользает от второй), поэтому "\\""
не будет соответствовать.
Привет Большое спасибо. Это очень хороший способ сделать это. Но одна проблема: моя рубиновая версия - 1.8.6, которая не поддерживает '?'. Есть ли у вас какие-либо идеи по этому поводу? спасибо –
@AllanJiang, я добавлю другое решение, которое не будет использовать lookbehind. –
Спасибо, что он работает так, как я сказал ... но я нашел еще одну проблему с вашим ответом ... в моей ситуации я хочу, чтобы это совпадало, только двойные кавычки скрываются во внешней двойной кавычки, но в этом случае это не работает, когда такие вещи случаются "GET/class/\" notes \ ". txt \" '(последний двойной qoute также экранирован), что означает, что внешняя цитата также экранируется. Я не хочу, чтобы в этом случае была скрыта внешняя двойная кавычка ... но не может найти решение ... Не уверен, что вы можете это исправить? спасибо –