Reputation: 3
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
Reputation: 19423
Try the following expression:
([\\"'])(?:[^\\"]|\\\\")+\\1
Upvotes: 1
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