Я не знаю, кто закрыл этот вопрос, но, пожалуйста, прочитайте вопрос... Это законная проблема, и у меня есть провел большое количество исследований в Интернете и не может найти способ реализовать это на С++. Я могу только предположить, что тот, кто закрыл вопрос, не читал его. (Они не указали причину закрытия вопроса, поэтому, если вы собираетесь закрыть его снова, объясните, почему.)
Я пишу программу на C++, которая должна принимать регулярные выражения, определенные в файле схемы XML, и использовать их для проверки данных XML. Проблема в том, что разновидность регулярных выражений, используемых XML-схемами, похоже, не поддерживается напрямую в C++.
Например, есть пара специальных классов символов \i
и \c
, которые не определены по умолчанию, а также язык регулярных выражений XML-схемы поддерживает нечто, называемое вычитание класса символов, которое, похоже, не поддерживается в C++.
Разрешить использование специальных классов символов \i
и \c
довольно просто, я могу просто найти \i или \c в регулярном выражении и заменить их их расширенными версиями, но заставить работать вычитание классов символов — гораздо более сложная проблема. ...
Например, это регулярное выражение, допустимое в определении XML-схемы, вызывает исключение в C++, говорящее о несбалансированных квадратных скобках.
#include <iostream>
#include <regex>
int main()
{
try
{
// Match any lowercase letter that is not a vowel
std::regex rx("[a-z-[aeiuo]]");
}
catch (const std::regex_error& ex)
{
std::cout << ex.what() << std::endl;
}
}
Как я могу заставить С++ распознавать вычитание класса символов в регулярном выражении? Или, что еще лучше, есть ли способ просто использовать разновидность XML-схемы регулярных выражений непосредственно в C++?