#include <boost/regex.hpp>
#include <string>
#include <vector>
#include <iostream>
int main(int argc, char* argv[]) {
std::string text = argv[1];
std::string patterns = argv[2];
boost::regex regex = boost::regex(patterns);
boost::smatch match;
std::cout << boost::regex_search(text, match, regex) << std::endl;
}
如果我在输入字符串 hello¿ ¿
(包含一个UTF-8编码的非ASCII字符)上运行程序,它返回 0
表示未找到,但如果我在输入字符串 hel√ √ 上运行它(再次包含非ASCII字符),它返回 1
,表示找到了。我的问题是:当使用utf字符时,
boost::regex
(即ascii版本)的预期行为是什么?编辑:感谢所有评论,我仍然对为什么输出1感兴趣,因为文本和正则表达式都包含非ASCII字符。我猜测是字节被解释为ASCII,因此它们匹配。
√
的 UTF8 编码是E2 88 9A
,在 Latin-1 中被解释为√
。这里有一个有趣的问题,为什么你得到了0
的结果,而¿
的编码是C2 BF
,在 Latin-1 中被解释为¿
。你能分享一些关于你的系统的细节,以及你如何调用命令的信息(即你如何 精确地 传递参数)吗? - Lucas Trzesniewski