boost::regex_match дает другой результат, чем многие онлайн-тестеры регулярных выражений
Я хочу сопоставить строку, указанную в поле ввода.
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.
Я инициализирую анализатор буст-регулярных выражений следующим образом:
std::string myString = "\"\"\"";
boost::smatch match;
boost::regex regExpString3("[\"']((:?[^\"']|\\\")+?)[\"']");
bool statusString3 = boost::regex_match(myString, match, regExpString3);
Regex_match не должно совпадать, но, к сожалению, оно совпадает...
Я проверил несколько онлайн-тестеров на регулярные выражения: мое регулярное выражение не совпадало (как и ожидалось).
Любая идея, если это может быть ошибка повышения или я делаю что-то не так?
Демонстрация Debuggex: нажмите меня, чтобы проверить ("[\"']((:?[^\"']|\\")+?)[\"']"
Спасибо
2 ответа
Решение
2013-11-07 14:36
Регулярное выражение излишне для этой простой проверки. Просто проверьте строку на наличие открывающей кавычки, а затем найдите следующую кавычку, которой не предшествует обратная косая черта. Если эта вторая кавычка не в конце, строка не в правильном формате.