为什么在线测试的正则表达式在C++中的表现完全不同

Why do online tested regular expressions behave completely different in C++?

本文关键字:在线测试 正则表达式 C++ 为什么      更新时间:2023-10-16

当使用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

这就是为什么这个程序每次都给我一个假匹配。只是因为我假设它只匹配字符串的一部分,就像在线测试人员和其他语言一样。