Вложенные квантификаторы в boost :: regex - PullRequest
0 голосов
/ 29 августа 2010

Является ли \d++ допустимым регулярным выражением в языках программирования, которые не поддерживают собственнический квантификатор? Это эквивалентно (\d+)+?

При тестировании в Python возникает ошибка sre_constants.error: multiple repeat. В C # будет выдано исключение времени выполнения: System.ArgumentException: parsing "\d++" - Nested quantifier +. Так же как boost :: xpressive.
Но \d++...+считается действительным в boost :: regex.

wchar_t* s = L"abc123" ;
wregex e(L"\\d+++", boost::regex::normal) ;
wcmatch m ;

if(regex_search(s, m, e)){
    wcout <<  m[0] << endl ;
}

Вывод 123.

Ответы [ 2 ]

1 голос
/ 29 августа 2010

Без собственнических квантификаторов, что бы означало \d++ (или (\d+)+)?

Давайте предположим, что это был допустимый синтаксис, и мы могли бы прочитать его как «одну или несколько (одну или несколько цифр)»».В этом случае мы все равно сможем уменьшить выражение до \d+ (\d+ соответствует одной цифре, поэтому (\d+)+ можно упростить до (\d)+, что по-прежнему соответствует одной или нескольким цифрам).Следовательно, \d++ будет избыточным.

Я не знаю ни о каком механизме регулярных выражений с \d++ допустимым синтаксисом, кроме механизмов, которые поддерживают собственнические квантификаторы.

1 голос
/ 29 августа 2010

Приведенный выше код генерирует для меня экземпляр boost :: bad_expression с «недопустимым предшествующим регулярным выражением». Это система RedHat Linux, скомпилированная с gcc 3.4.6 и boost 1_32.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...