2014-01-08 2 views
4

Мне нужно найти файлы, которые соответствуют шаблону, который похож на шаблон, который указан в командной строке в стиле glob, используя boost.Соответствие шаблону регулярного выражения типа Glob с использованием boost

Например:
Если вход myFiles*.c он должен соответствовать файлам myFiles.c , myFiles1.c, myFiles123.c и т.д ..

Пробовал с помощью boost::regex_match с режимом perl. Но мне пришлось указать шаблон ввода как myfiles.*.c вместо myFiles*.c. Я могу признать myfiles*.c и перевести его на myFiles.*.c и передать его boost::regex_match в режиме perl. Но шаблон ввода может быть любым регулярным выражением vaild в стиле glob, поскольку он задан для утилит командной строки.

Есть ли способ в boost, чтобы шаблон интерпретировался в стиле glob?

Я раньше не использовал boost.
Любая помощь? Благодарю.

ответ

0

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

Сделайте это, заменив все '.' с "\.". После этого замените все «*» на «. *» И запустите все?? с '.' (конечно, без одиночных и двойных кавычек;).

Вот функция C#, которую я использовал раньше. Это может дать вам обзор того, о чем я говорю.

private bool FNMatch(string fileName, string fileMask) 
    { 
     if (fileMask == "*.*" || fileMask == "*") 
      return true; 

     Regex mask = new Regex(
      '^' + 
      fileMask 
       .Replace(@".", @"\.") 
       .Replace(@"*", @".*") 
       .Replace(@"?", @".") 
      + '$', 
      RegexOptions.IgnoreCase); 
     return mask.IsMatch(fileName); 
    } 

Он не обрабатывает все шаблоны glob, но он позаботится о самых распространенных.

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

Смежные вопросы