2blackcoffees
2blackcoffees

Reputation: 3

boost::regex_match gives different result than many online reggex tester

I want to match a string given in an input field.

A sample data could be "hello" -> returns true 
or "\"" -> returns true 
or "this is a string" -> returns true 
but """ should not be recognized as a string and should return false when checked by the regexp.

I am initializing a boost regex parser as follow:

    std::string myString = "\"\"\"";
    boost::smatch match;
    boost::regex regExpString3("[\"']((:?[^\"']|\\\")+?)[\"']");
    bool statusString3 = boost::regex_match(myString, match, regExpString3);

The regex_match should not match but unfortunately it does match ...

I checked on several online reggex tester: my regular expression did not match (as expected).

Any idea if this could be a bug of boost or am I doing something wrong ?

Debuggex Demo: Click me to verify ("[\"']((:?[^\"']|\\")+?)[\"']"

Thanks

Upvotes: 0

Views: 5141

Answers (2)

Ibrahim Najjar
Ibrahim Najjar

Reputation: 19423

Try the following expression:

([\\"'])(?:[^\\"]|\\\\")+\\1

Regex101 Demo

Upvotes: 1

Pete Becker
Pete Becker

Reputation: 76245

A regular expression is overkill for this simple check. Just check the string for an opening quotation mark, then search for the next quotation mark that isn't precede by a backslash. If that second quotation mark isn't at the end, the string isn't in the correct format.

Upvotes: 0

Related Questions