Надо парсить строку. Хочется регеэкспов от Posix – но никто не обещает posix-совместимых систем. Проект сишный и плюшки C++ как то не уместны, потому же boost – нельзя. И вообще с учетом закостенелости процесса развертывания – сторонние либы включать адски не желательно. Под такие ограничения прекрасно подходит функция strtok из ANSI C.
Нижеуказанный сниппет производит разбор строки, выдавая на каждой итерации участок строки между заданными разделителями. Разделители при необходимости можно на очередной итерации изменить. Учтите – оригинальную строку – свой первый параметр – данная функция изменяет. Учтите, если строка состоит из одних разделителей – она может вернуть не нулевое значение.
char* test_string = "a:bgf,tre"; char* pch = strtok (test_string,":,"); while (pch != NULL) { /* TODO: processing string parts */ pch = strtok (NULL, ":,"); }
Ее приемница, функция strsep умеет работать с массивом строк, но, при этом проигрывает в портабельности.
Пример использования strsep для парсинга строк, с разбивкой на пробелы и табы, нагло скопипащенный из мана:
char **ap, *argv[10], *inputstring; for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;) if (**ap != '\0') { /* TODO: processing string parts */ if (++ap >= &argv[10]) break; }
В качестве зы – ссылка на код утилиты grep, где можно посмотреть как работать с символами wildcard при анализе имен файлов:
http://cm.bell-labs.com/cm/cs/tpop/grep.c
1 comment
Можно просто вкорячить исходник pcre старой версии – он небольшой по размеру.