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 ответа

Решение

Попробуйте следующее выражение:

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

Regex101 Demo

Регулярное выражение излишне для этой простой проверки. Просто проверьте строку на наличие открывающей кавычки, а затем найдите следующую кавычку, которой не предшествует обратная косая черта. Если эта вторая кавычка не в конце, строка не в правильном формате.

Другие вопросы по тегам