Мне понравилась более обширная версия Axeman, но у меня возникли некоторые проблемы (например, она не соответствовала
).
foo "string \\ string" bar
или
foo "string1" bar "string2"
правильно, поэтому я попытался это исправить:
# opening quote
(["'])
(
# repeat (non-greedy, so we don't span multiple strings)
(?:
# anything, except not the opening quote, and not
# a backslash, which are handled separately.
(?!\1)[^\\]
|
# consume any double backslash (unnecessary?)
(?:\\\\)*
|
# Allow backslash to escape characters
\\.
)*?
)
# same character as opening quote
\1