300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > C++正则匹配中文乱码_中文正则表达式匹配-正则中文匹配

C++正则匹配中文乱码_中文正则表达式匹配-正则中文匹配

时间:2019-05-24 20:23:18

相关推荐

C++正则匹配中文乱码_中文正则表达式匹配-正则中文匹配

使用std::wregex

#include <QtCore/QCoreApplication>#include <iostream>#include <string>#include <regex>using namespace std;int main(int argc, char *argv[]){QCoreApplication a(argc, argv);bool foundmatch = false;try {std::wregex re(LR"([a-zA-Z]:\\[\.\w-_\u4e00-\u9fa5\\]*)"); //windows文件夹路径std::wstring subject = L"D:\\Tools\\软件\\xournalpp-1.0.17-windows";foundmatch = std::regex_search(subject, re);cout << foundmatch << endl;}catch (std::regex_error& e) {cout << e.what() << endl;}return a.exec();}

以上方式存在缺陷,不支持Unicode scrpt。(\p{IsScript} for Unicode scripts)

使用qt框架下的QJSEngine类:

在c++中运行js脚本执行正则匹配:

#include <QtCore/QCoreApplication>#include <QJSEngine>#include <QDebug>#include <QFile>#include <QTextStream>using namespace std;int main(int argc, char *argv[]){QCoreApplication a(argc, argv);QJSEngine js;QJSValue module = js.importModule("D:/tcl_me/math.mjs");QJSValue sumFunction = module.property("sum");QString str = "38u48djhfod中国,@##@!_)+bia發財";QJSValueList args;args << str;QJSValue result = sumFunction.call(args);if (result.isError()){qDebug() << result.toString();return -1;}qDebug() << result.toBool();return a.exec();}

使用的js脚本代码(math.mjs):

export function sum(subject) {var reg = /[\p{Han}]+/g;var ret = subject.match(reg);return ret;}

运行结果:

匹配成功。

期间测试过PCRE、PCRE2,Boost::regex,POCO::RegularExpression、Googel::RE2效果均不佳,根本原因是c++语言本身对Unicode的支持欠佳,需要使用ICU通用组件库配合Boost::regex,并且Boost::regex默认ICU不参加编译,十分麻烦。

QJSEngine搭载V8引擎,执行js脚本相当快。故采用c++和js脚本混合编程快速解决“c++正则表达式匹配中文”产生的一系列问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。