Если вы укажете флаги как 0 в regcomp
:
return_value = regcomp(®ex,"[^a-fA-F_][0-9]+",0);
, тогда вы принимаете синтаксис регулярного выражения по умолчанию, который является так называемым Basi c Regular Expression (BRE ) . Единственное разумное, что можно сказать о BRE, - это «не использовать их». Всегда указывайте флаг REG_EXTENDED
(по крайней мере), и тогда вы будете работать с синтаксисом регулярных выражений, который хотя бы имеет некоторое сходство с тем, что вы ожидаете. (В противном случае в ваших строках будет преобладать то, что технически называется «наклонная древесина»: \
символов, которые включают метасимволы в регулярном выражении, и более \
символов, так что \
символы, которые вам нужны, не будут рассматриваться как escape-символы в строка символов.)
Посмотрите man regexe c и man 7 regex для получения дополнительных сведений. Убедитесь, что вы внимательно прочитали вторую ссылку (хотя вы можете игнорировать синтаксис регулярных выражений basi c :-)), потому что в более современных библиотеках регулярных выражений есть много часто используемых синтаксисов, которых нет в регулярных выражениях Posix, даже не расширенных. (Это включает \d
, используемый во втором регулярном выражении. Posix имеет именованные классы символов, например [[:digit:]]
.)