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.

Я инициализирую парсер регулярных выражений boost следующим образом:

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

regex_match не должен совпадать, но, к сожалению, совпадает...

Я проверил несколько онлайн-тестеров регулярных выражений: мое регулярное выражение не совпало (как и ожидалось).

Любая идея, если это может быть ошибка повышения или я делаю что-то не так?

Демонстрация отладки: нажмите на меня, чтобы подтвердить ("[\"']((:?[^\"']| \\")+?)[\"']"

Спасибо


person 2blackcoffees    schedule 07.11.2013    source источник
comment
Что вы пытаетесь сопоставить, можете ли вы показать нам некоторые образцы данных с ожидаемым результатом?   -  person Ibrahim Najjar    schedule 07.11.2013
comment
Привет, Sniffer, я хочу сопоставить строку, указанную в поле ввода. Примером данных может быть hello -› возвращает true или \ -› возвращает true или это строка -› возвращает true, но не должна быть распознана как строка и должна возвращать false при проверке регулярным выражением.   -  person 2blackcoffees    schedule 07.11.2013
comment
Пожалуйста, отредактируйте свой вопрос, чтобы включить эту информацию.   -  person Ibrahim Najjar    schedule 07.11.2013
comment
Напишите онлайн-тестер регулярных выражений на основе повышения, и будет онлайн-тестер, который соответствует! :D   -  person Naszta    schedule 07.11.2013


Ответы (2)


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

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

Демо Regex101

person Ibrahim Najjar    schedule 07.11.2013
comment
regex_match соответствует всей строке, поэтому ^ в начале и $ в конце не нужны. - person Pete Becker; 07.11.2013
comment
@PeteBecker Спасибо, я не работаю ни с boost, ни с regex_match, поэтому я этого не знал, я отредактирую соответственно. - person Ibrahim Najjar; 07.11.2013

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

person Pete Becker    schedule 07.11.2013
comment
Извините, я разместил неправильный комментарий, который я удалил. Хорошо, я проверю это, как только найду плитку, чтобы сравнить преимущества вашего решения. - person 2blackcoffees; 07.11.2013