gpt4 book ai didi

c++ - C++ 中的正则表达式字符类减法

转载 作者:行者123 更新时间:2023-12-01 23:29:31 25 4
gpt4 key购买 nike

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

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

最佳答案

字符范围减法或交集在 std::regex 支持的任何语法中都不可用,因此您必须将表达式重写为受支持的语法之一。

最简单的方法是自己执行减法并将集合传递给 std::regex,例如 [bcdfghjklvmnpqrstvwxyz] 就是您的示例。

另一种解决方案是寻找功能更强大的正则表达式引擎或支持 XML 模式及其正则表达式语言的专用 XML 库。

关于c++ - C++ 中的正则表达式字符类减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66533829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com