Я написал это регулярное выражение:Почему я не в состоянии построить этот Regex
(.+?)\s*{?\s*(.+?;)\s*}?\s*
какие тесты отлично: https://regex101.com/r/gD2eN7/1
Но когда я пытаюсь построить его в C++ я получаю во время выполнения ошибок.
Необработанное исключение в 0x7714C52F в temp2.exe: Microsoft C++ исключение:
станд :: regex_error в ячейку памяти 0x003BF2EC.
const auto input = "if (KnR)\n\tfoo();\nif (spaces) {\n foo();\n}\nif (allman)\n{\n\tfoo();\n}\nif (horstmann)\n{\tfoo();\n}\nif (pico)\n{\tfoo(); }\nif (whitesmiths)\n\t{\n\tfoo();\n\t}"s;
cout << input << endl;
cout << regex_replace(input, regex("(.+?)\\s*{?\\s*(.+?;)\\s*}?\\s*"), "$1 {\n\t$2\n}\n") << endl;
Могу ли я с помощью функции, C++ не поддерживает?
Рассмотрите возможность использования «необработанного строкового литерала» для вашего регулярного выражения - это избавит вас от «ускользания адского материала» и сделает ваш код более удобочитаемым. Кроме того, пожалуйста, укажите код, ошибки и т. Д. Непосредственно в вопросе, а не просто ссылки - ссылки устаревают и исчезают, а также вводят дополнительный барьер (больше работы) для ваших пациентов (свободных) рецензентов. Не заставляйте нас работать усерднее, чем нужно. –
C++ Shell не дает никаких ошибок (http://cpp.sh/7bue). –
Исключить фигурные скобки: 'regex_replace (input, regex (" (. +?) \\ s * \\ {? \\ s * (. + ?;) \\ s * \\}? \\ s * "), «$ 1 {\ n \ t $ 2 \ n} \ n") '- http://ideone.com/jlH6QS –