Я бы хотел сопоставить все, пока не найду нечетное число %
в последовательности, за которым следуют 2 необязательные группы и 1 обязательная группа. (эти группы похожи на C ++ std::printf("%22lld")
)
Я пытаюсь сделать это в C ++, и я пробовал эти два регулярных выражения:
Первый поддерживает нечетное число «%», но только если обязательная группа пуста:
.*?(?=%([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr]))
(может захватывать только%, но не более 1%)
Этот может обрабатывать нечетное количество% случаев, но не в том случае, если нечетное число обязательного поля% пусто:
((([^%]*)(?!\s)(?:%{2})*)*%)([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr])
Версия C ++, которую я использую, не поддерживает просмотр назад, но поддерживает прогнозирование.
Тестовая строка: arg1 %% d arg% 22lld, должна соответствовать
group1: arg1 %%d arg%
group2:22
group3:ll
group3:d
Тестовая строка: arg%% 1586lld asd% d должно соответствовать
group1: arg % %1586lld asd %
group2:
group3:
group3:d
Вот ссылки на то, что я пробовал.