Victor_168 2023-03-25 19:43 采纳率: 0%
浏览 170
已结题

C++的regex库正则表达式匹配汉字、字母和数字,运行程序报错异常

#include <regex>
#include <string>
#include <iostream>

std::string filterText(const std::string& text)
{
    // 定义正则表达式,匹配非汉字、字母和数字的字符
    std::regex pattern("[^[:alnum:][:alpha:][\\u4e00-\\u9fa5]]");
    // 使用正则表达式去掉非汉字、字母和数字的字符
    std::string filteredText = std::regex_replace(text, pattern, "");
    return filteredText;
}

int main()
{
    std::string text = "Hello, 你好!123。";
    std::string filteredText = filterText(text);
    std::cout << filteredText << std::endl; // 输出:Hello你好123

    return 0;
}

报错:

0x75713522 处(位于 Project1.exe 中)有未经处理的异常: Microsoft C++ 异常: std::regex_error,位于内存位置 0x0095E9B8 处。
  • 写回答

9条回答 默认 最新

  • 「已注销」 2023-03-25 20:26
    关注

    参考GPT:在运行程序时出现了std::regex_error异常,这可能是由于正则表达式的语法错误导致的。您可以尝试使用以下代码来检查正则表达式是否正确:

    std::regex pattern;
    try {
        pattern = "[^[:alnum:][:alpha:][\\u4e00-\\u9fa5]]";
    } catch (const std::regex_error& e) {
        std::cout << "Regex error: " << e.what() << std::endl;
        return "";
    }
    

    如果正则表达式存在语法错误,该代码将抛出std::regex_error异常并打印错误信息。您可以根据错误信息修正正则表达式的语法错误。

    另外,如果您在Windows系统中使用的是Visual Studio编译器,则需要在编译器选项中启用C++11或更高版本的支持。可以在编译器选项中添加"/std:c++latest"或"/std:c++11"等选项来启用C++11或更高版本的支持。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月26日
  • 请采纳用户回复 3月26日
  • 创建了问题 3月25日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大