boost::regex_match дава различен резултат от много онлайн тестери на regex

Искам да съпоставя низ, даден в поле за въвеждане.

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: Щракнете върху мен, за да потвърдите ("[\"']((:?[^\"']| \\")+?)[\"']"

Благодаря


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
Напишете онлайн тестер за регулярни изрази, базиран на boost, и ще има онлайн тестер какво съвпадение! :Д   -  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