Да, вы можете обрабатывать регулярные выражения во время выполнения. Регулярные выражения POSIX обрабатываются двумя основными функциями: regcomp()
и regexec()
(плюс regfree()
и regerror()
). В приведенном ниже примере regex_string
- это что-то вроде «temp. *», А string_to_match
- «temp, который будет соответствовать»
regex_t reg;
if(regcomp(®, regex_string, REG_EXTENDED | REG_ICASE) != 0) {
fprintf(stderr, "Failed to create regex\n");
exit(1);
}
if(regexec(®, string_to_match, 0, NULL, 0) == 0) {
fprintf(stderr, "Regex matched!\n");
} else {
fprintf(stderr, "Regex failed to match!\n");
}
regfree(®);
Я хотел добавить, что regex_string - это просто char *
, который может быть любой строкой с нулевым символом в конце. string_to_match снова может быть любой строкой с нулевым символом в конце. Важно различать, что изменение regex_string после того, как у вас есть regcomp()
'd, НЕ меняет регулярное выражение, с которым действительно сопоставляется regexec()
. Для этого вам нужно будет regfree()
, а затем повторно regcomp()
.