Skip to content

<regex>: regex_search behaves incorrectly when the regex contains R"(\[)" #996

@AlexGuteniev

Description

@AlexGuteniev

Describe the bug
With R"#( *((<<)|(\[)|(.+)))#" pattern and " [<</Category/Export>>]>>" input regex should give the first match as (\[), but gives (.+)

Command-line test case

d:\Temp2>type repro.cpp
#include <iostream>
#include <string>

//#define TRY_BOOST
#ifdef TRY_BOOST

#include <boost/regex.hpp>
using namespace boost;

#else

#include <regex>
using namespace std;

#endif


int main() {

        std::string s(" [<</Category/Export>>]>>");
        regex regex(R"#( *((<<)|(\[)|(.+)))#");
        match_results<std::string::const_iterator> match;
        regex_search(s, match, regex);

        for (std::size_t i = 0, m = match.size(); i != m; i++) {
                std::cout << i << ": " << std::string(match[i].first, match[i].second) << "\n";
        }

        return 0;
}

d:\Temp2>cl /EHsc /W4 /WX .\repro.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.27.29009.1 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

repro.cpp
Microsoft (R) Incremental Linker Version 14.27.29009.1
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:repro.exe
repro.obj

d:\Temp2>.\repro.exe
0:  [<</Category/Export>>]>>
1:  [<</Category/Export>>]>>
2:
3:
4:  [<</Category/Export>>]>>

Expected behavior

0:  [
1: [
2:
3: [
4:

STL version

Microsoft Visual Studio Professional 2019 Preview
Version 16.7.0 Preview 3.1

Additional context
This item is also tracked on Developer Community as DevCom-326044 and by Microsoft-internal VSO-678814 / AB#678814.

See also #405

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixedSomething works now, yay!regexmeow is a substring of homeowner

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions