С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 8

Регулярное выражение для получения списка файлов определенного расширения

15.12.2014, 21:20. Показов 2478. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На С++ нужно из всех файлов выбрать те, которые, к примеру с раширением .txt, или .html
Так вот, как мне сравнить регулярное выражение (наше .txt) и строчку в которой содержится название(абра-кадабра.txt)?
Как будет выглядеть само выражение?
В какой библиотеке лучше всего это делать(или грамматике, не знаю как правильно назвать)?
Помогите и расскажите пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2014, 21:20
Ответы с готовыми решениями:

Регулярное выражение для получения подстроки
Доброго времени суток, друзья! Имеется строчка: Поиск<sup class="tab-v93-l tab-v93-l_coun">15651</sup> Помогите выбрать из этой...

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

Регулярное выражение для получения ссылки на картинку
Здравствуйте уважаемые форумчане. Есть необходимость парсингом из статей ВК получать ссылки на изображения. Их в статье может быть...

4
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.12.2014, 21:28
выбрать те, что

glob (programming)
globbing
1
0 / 0 / 0
Регистрация: 23.01.2014
Сообщений: 8
15.12.2014, 21:37  [ТС]
К сожалению не особо силен в английском, можете объяснить как для дурачка
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.12.2014, 22:08
Цитата Сообщение от Ychenie_i_trud Посмотреть сообщение
не особо силен в английском

Не по теме:

English - пропуск в профессию.


По первой же ссылке: Wildcard string compare (globbing)

This is a fast, lightweight, and simple pattern matching function.
C++
1
2
3
4
5
if (wildcmp("bl?h.*", "blah.jpg")) {
  //we have a match!
} else {
  //no match =(
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int wildcmp(const char *wild, const char *string) {
  // Written by Jack Handy - <A href="mailto:jakkhandy@hotmail.com">jakkhandy@hotmail.com</A>
  const char *cp = NULL, *mp = NULL;
 
  while ((*string) && (*wild != '*')) {
    if ((*wild != *string) && (*wild != '?')) {
      return 0;
    }
    wild++;
    string++;
  }
 
  while (*string) {
    if (*wild == '*') {
      if (!*++wild) {
        return 1;
      }
      mp = wild;
      cp = string+1;
    } else if ((*wild == *string) || (*wild == '?')) {
      wild++;
      string++;
    } else {
      wild = mp;
      string = cp++;
    }
  }
 
  while (*wild == '*') {
    wild++;
  }
  return !*wild;
}
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.12.2014, 22:08
Лучший ответ Сообщение было отмечено Ychenie_i_trud как решение

Решение

http://rextester.com/OEW31512

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <boost/regex.hpp>
 
#include <iostream>
#include <string>
using namespace std;
 
 
typedef ::std::string
    str;
 
str FileMask2Regex(const str& mask) 
{
    const str name_q = ".";
    const str name_s = ".*";
    const str point  = "\\.";
    const str ext_q  = "[^.]";
    const str ext_s  = "[^.]*";
 
    const size_t ip  = mask.rfind('.');
    const size_t len = mask.length(); 
    str Regex;
 
    for(size_t n=0;n<len;++n)
    {
        const auto ch = mask[n];
        if (ch == '.' )     { Regex += point; continue; }
        else if (ch == '*') { Regex += (n>ip)? ext_s: name_s; continue; }
        else if (ch == '?') { Regex += (n>ip)? ext_q: name_q; continue; }
        Regex = Regex + ch;
    }
    return Regex;
}
bool SelectedByRegex(const str& name,  const str& regex_mask)
{
    const  boost::regex my_filter(regex_mask);
    return boost::regex_match(name, my_filter);
}
 
 
void Test(const str& name, const str& mask)
{
    cout<<"mask:'"<<mask<<"'\t: name:\t'"<<name<<"' : "
        << ( SelectedByRegex( name, FileMask2Regex(mask) )? "true": "false" )
        << '\n';
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
   
    Test("abra-cadabra.txt", "*.txt");
    Test("abra-cadabra.txt", "*.com");
    
    Test("abra-cadabra.txt", "a*.t*");
    Test("abra-cadabra.txt", "aa*.t*");
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2014, 22:08
Помогаю со студенческими работами здесь

Регулярное выражение для получения содержимого тега
Здравствуйте. Пишу регулярное выражение, но почему то не находит &lt;span class=&quot;rating_ball&quot;&gt;6.901&lt;/span&gt; ...

Регулярное выражение для получения текста в кавычках
подскажите регулярное выражение чтобы выдрать из текса все что в кавычках

Регулярное выражение для получения цифры по бокам от буквы
Здравствуйте. Предположим, есть строчки: Мне нужно получить цифры, находящиеся справа и слева от &quot;x&quot; и саму букву в том...

Регулярное выражение для получения значения ячейки таблицы
Добрый день, приходит таблица. В ячейках информация. &lt;td&gt;Бренд&lt;/td&gt; &lt;td&gt;&lt;a class=&quot;margin-left-20&quot;...

Регулярное выражение для получения названия из html-кода
Доброго времени суток, имеется такой код &lt;div class=&quot;postertitle&quot;&gt;&lt;a href=&quot;*ссылка*&quot;&gt;Название / Название(транслит)&lt;/a&gt;&lt;div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru