为什么在线测试的正则表达式在C++中的表现完全不同
Why do online tested regular expressions behave completely different in C++?
当使用C++(msvc编译器)正则表达式库(boost和stl)时,我发现许多在线测试(均来自Regex堆栈溢出常见问题解答)的正则表达式不起作用,例如:
w
([w]+)
[a-z]
[abcdef] \etc...
我的正则表达式使用Raw Literals,所以这不是问题所在。
我目前用来测试它们的代码是
string somestring="something othersomething";
regex Test(R"(w)",boost::regex_constants::JavaScript);
smatch match;
if(regex_match(somestring,match,Test))cout<<"True"<<endl;
else cout<<"false"<<endl;
当我在Java等不同语言中尝试它时,这很有效,为什么它不是C++?
第页。S我有一种感觉,这与以不同的方式阅读空白有关。
正则表达式引擎在不同的编程语言之间有所不同。这些被非正式地称为"口味"。
Java Regex != C++ Regex != PRCE != .NET Regex
。。。你明白了。
如果您要使用在线regex测试仪,请确保它符合您计划使用的regex的风格。
正如JNYRanger所说,这是一个口味问题,但如果你注意到了我在我的代码中使用了regex_match而不是regex_search
这就是为什么这个程序每次都给我一个假匹配。只是因为我假设它只匹配字符串的一部分,就像在线测试人员和其他语言一样。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- 正则表达式传递正则表达式测试器,但在 qt 中失败
- 为什么在线测试的正则表达式在C++中的表现完全不同
- Boost.Test 使用正则表达式测试文件内容
- C++正则表达式让所有比赛都在线
- 元正则表达式:测试正则表达式是否只是一个字符串(没有正则表达式"wildcards")
- 谷歌测试的正则表达式中的匹配行尾ASSERT_DEATH