在Visual Studio 2015中使用POSIX字符类[:blank:]
时,我希望换行符和回车符不匹配,但这不是我看到的行为。
http://www.cplusplus.com/reference/regex/ECMAScript/表示POSIX字符类[:blank:]
相当于isblank
,但它们没有排队。 isblank
为空格和制表符返回正数,但对于回车符和换行符返回false,而[:blank:]
匹配空格,制表符,换行符和回车符。
这是我的示例代码:
#include <cctype>
#include <iostream>
#include <regex>
#include <string>
using namespace std;
bool reMatches( const regex &re, const char c )
{
return regex_search( string( 1, c ), re );
}
bool isBlank( const char c )
{
return isblank( c ) != 0;
}
int main() {
const char testChars[] = { ' ', '\t', '\r', '\n', '.' };
const char *dispChars[] = { " ", "\\t", "\\r", "\\n", "." };
regex explicitClass( "[ \t]" );
regex posixClass( "[[:blank:]]" );
for ( unsigned i = 0; i < sizeof( testChars ); ++i )
{
char c = testChars[i];
if ( isBlank( c ) != reMatches( explicitClass, c ) )
cout << "Mismatch found between isblank & [ \t] for " << dispChars[i] << std::endl;
if ( isBlank( c ) != reMatches( posixClass, c ) )
cout << "Mismatch found between isblank & [[:blank:]] for " << dispChars[i] << std::endl;
}
}
以下是结果输出:
Mismatch found between isblank & [[:blank:]] for \r
Mismatch found between isblank & [[:blank:]] for \n
[ \t]
按预期行事,但[[:blank:]]
匹配\r
和\n
!我做错了吗?
答案 0 :(得分:0)
事实证明,这是VC ++中的一个错误。在clang或gcc下运行此代码表现出正确的行为(无输出)。
经过测试的代码:http://rextester.com/MCP44517
错误已提交:https://connect.microsoft.com/VisualStudio/feedback/details/3131111/std-regex-posix-character-class-blank-matches-newlines