【发布时间】:2021-03-09 01:49:42
【问题描述】:
我不知道是谁关闭了this question,但请实际阅读这个问题...这是一个合法的问题,我已经在网上进行了大量研究,但找不到任何方法在 C++ 中实现它。我只能假设关闭问题的人没有阅读它。 (他们没有提供关闭问题的任何理由,所以如果您要再次关闭它,请解释原因。)
我正在编写一个 C++ 程序,它需要采用在 XML Schema 文件中定义的正则表达式并使用它们来验证 XML 数据。问题是,C++ 似乎不直接支持 XML Schema 使用的正则表达式风格。
例如,有几个特殊字符类 \i 和 \c 默认情况下未定义,而且 XML Schema 正则表达式语言支持称为“character class subtraction”的东西,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 Schema 风格?
【问题讨论】:
-
我认为您的问题是完全有效的(尽管答案可能是它不受支持)。 [regex] 标签也适用于这个问题,但是,简单地添加该标签可能会关闭您的问题。请不要添加该标签。事实上,我强烈建议不要在任何关于 SO 的问题中添加 [regex] 标签。
-
我知道这个问题并不是专门寻找正则表达式中的语法错误,但它绝对是一个直接关于正则表达式的问题,所以“regex”标签适用。 (除非我完全误解了应该如何使用标签)
-
由于您的原始问题已重新打开,您可以继续关闭此问题作为副本。
-
谢谢@cigien :) 既然我对最初的问题给予了赏金,我离找到一个可靠的解决方案越来越近了。
标签: c++ regex c++17 character-class