我不知道谁关闭了这个问题,但请实际阅读问题…这是一个合理的问题,我在网上做了大量的研究,找不到任何方法在c++中实现它。我只能假设结题的人没有读过。(他们没有提供问题被关闭的任何原因,所以如果你要再次关闭它,请解释原因。)
我正在编写一个c++程序,该程序需要在XML Schema文件中定义正则表达式,并使用它们来验证XML数据。问题是,XML模式使用的正则表达式的风格似乎不直接支持c++。
例如,有两个特殊的字符类i
和c
是默认不定义的,而且XML Schema regex语言还支持"字符类减法"。c++中似乎不支持
允许使用i
和c
特殊字符类非常简单,我可以查找" I "或"; c"在正则表达式中,并将它们替换为扩展版本,但是让字符类减法工作是一个更艰巨的问题…
例如,在XML Schema定义中有效的正则表达式在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模式风格的正则表达式?
我从来没有听说过字符类减法,但是如果你想要任何非元音小写字母,你可以很容易地用常规字符类来表达:
std::regex rx("[a-df-hj-np-t-v-z]");