XML スキーマ ファイルで定義されている正規表現を取得し、それらを使用して XML データを検証する必要がある C++ プログラムを作成しています。問題は、XML スキーマで使用される正規表現のフレーバーが C++ で直接サポートされていないように見えることです。
たとえば、デフォルトでは定義されていない特殊な文字クラスがいくつかあります。また、XML スキーマの正規表現言語は、C++ ではサポートされていないように見える「文字クラスの減算」と呼ばれるもの\i
をサポートしています。\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;
}
}
C++ に正規表現内の文字クラスの減算を認識させるにはどうすればよいですか? または、さらに良いことに、C++ 内で直接正規表現の XML Schema フレーバーを使用する方法はありますか?