Реализация независимого от платформы Glob - PullRequest
2 голосов
/ 06 марта 2011

Я пытаюсь реализовать функцию glob(3) или glob -подобную в C ++.

У меня уже есть функция, которая считывает содержимое каталога в контейнер std::vector<std::string>(давайте назовем эту функцию ListDirectory()), поэтому мне, очевидно, понадобится только часть соответствия строк - Мои вопросы:

  • Какой концепции следует следовать при ее реализации?
  • Существуют ли распространенные ошибки, о которых следует помнить?
  • Разумно ли использовать полнофункциональную библиотеку регулярных выражений (например, PCRE) или достаточно простое сопоставление с шаблоном в стиле Lua?
  • Если используется простое сопоставление с шаблономлучше, есть ли уже работающие функции / библиотеки / классы (как насчет scanf и друзей)?

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Если вы ищете независимую от платформы библиотеку подстановочных знаков, например, есть библиотека shwild .

Если вы изучаете сопоставление с образцом в целях самообразования, Что касается основного регулярного выражения путем возврата, Я думаю, что первая глава Красивый код хорошо иллюстрирует.

Когда вы окажетесь дома в регулярном выражении, возможно, преобразование подстановочный знак в регулярное выражение или преобразование кода регулярного выражения в подстановочный знак, не будет тяжелой работой.

Что касается реалистичного регулярного выражения NFA, подробные объяснения будут найдены в Сайт Расса Кокса .

Надеюсь, это поможет

0 голосов
/ 07 марта 2011

Я использую это: wildcmp , в слегка адаптированном виде для отклонения разделителей каталогов / в *.Если вам нужен слегка адаптированный код (для удовольствия я также преобразовал указатели в строки / итераторы :)).Это чисто и просто, не нужно ничего более причудливого.

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