




Функция regexec() реализует Базовые регулярные выражения POSIX (BRE) и расширенные регулярные выражения (ERE).
Функция pcre_exec() реализует Регулярные выражения, совместимые с Perl, которые являются основным надмножеством ERE (см. Perlre для Perl спецификации Perl REs).
Обозначение \d не является специальным для POSIX ERE (не говоря уже о BRE); это не означает «цифра». Это действительно означает «цифра» в PCRE. Если вы хотите, чтобы регулярное выражение работало в обоих диалектах, вам нужно использовать [0-9] вместо \d и убедиться, что regcomp() скомпилирован ERE.
"^+?[0-9]{3,20}$"
Обратите внимание, что
\dв строке не является допустимым строковым литералом C;\dне является определенной escape-последовательностью. Ваш компилятор должен вас об этом предупредить. Вам нужно будет написать\\dв строковом литерале, чтобы получить\dв функции компиляции регулярного выражения.