Я обнаружил, что очень полезно знать, как писать регулярные выражения, используя как можно меньше наворотов:
"value":"([^\"]|\.)*"
Что это, по сути, говорит:
- Матч
"value":"
(легкая часть)
- Совпадение ноль или более:
- Все, кроме
\
или "
, ИЛИ
- Совпадение
\
, за которым следует ноль или более \
, за которыми следует любой не \
символ.
- Завершить регулярное выражение при совпадении с финалом
"
Это допускает любую escape-последовательность и предполагает, что обратная косая черта всегда различает escape-последовательность (это означает, что \\"
не является экранированной кавычкой, а скорее экранированной \
, за которой следует завершающая цитата).
Подставив его в тот же синтаксис, который был у вас (экранируя специальные символы), мы получим:
boost::regex testing123("\"value\":\"([^\\\"]|\\.)*\"");
Всегда старайтесь, чтобы регулярные выражения были простыми.