0

我不知道谁关闭了这个问题,但请实际阅读这个问题......这是一个合法的问题,我已经在网上进行了大量研究,但找不到任何方法在 C++ 中实现它。我只能假设关闭问题的人没有阅读它。(他们没有提供关闭问题的任何理由,所以如果您要再次关闭它,请解释原因。)

我正在编写一个 C++ 程序,它需要采用 XML Schema 文件中定义的正则表达式并使用它们来验证 XML 数据。问题是,C++ 似乎不直接支持 XML 模式使用的正则表达式风格。

例如,有几个特殊的字符类\i\c默认情况下没有定义,而且 XML Schema 正则表达式语言支持称为“字符类减法”的东西,这在 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 风格?

4

1 回答 1

0

我从来没有听说过字符类减法,但是如果你想要任何非元音小写字母,你可以很容易地用常规字符类来表达:

std::regex rx("[a-df-hj-np-t-v-z]");
于 2021-03-09T01:55:25.040 回答