Если вы работаете в Emacs, для работы с регулярными выражениями полезно использовать специальные инструменты Emacs. В частности, я рекомендую использовать re-builder
для построения своего выражения в интерактивном режиме.
Но даже эти выражения становятся достаточно доступными только для записи; на них очень трудно смотреть через несколько дней или недель, и они понимают, что они имеют в виду, без отличной документации (например, sln предоставил выражение Perl).
Я склонен создавать все свои регулярные выражения в Emacs, используя макрос rx
, который, как мне кажется, обеспечивает более читаемый код (хотя это может быть предметом споров). В вашем случае выражение будет выглядеть примерно так:
(rx "\"" (group (0+ (or (1+ (not (any "\"" "\\"))) (seq "\\" anything)))) "\"")
Если вы оцените это выражение в Emacs, оно выдаст:
"\"\\(\\(?:[^\"\\]+\\|\\\\\\(?:.\\|\\)\\)*\\)\""
Что само по себе было бы довольно сложно понять. На самом деле это то же самое выражение sln, которое было предложено выше, но оно используется для работы с Emacs.