С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760

[disign] файловая маска, regex

09.02.2015, 03:08. Показов 1404. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Как правильно конвертировать файловые маски в регулярки?

С обычными масками все просто:

Code
1
2
3
4
5
"*.txt"  => "^.*\\.txt$"
 
//В начале может быть сколько угодно символов, 
//затем точечка, затем текст txt,
//и при этом строка должна завершиться.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"*.* => "^.*\\.[^.]*$
 
//В начале может быть сколько угодно символов, 
//затем точечка, затем любой текст, но без точечки
 
//здесь важный момент: [^.]*
//в файловой маске звездочка после точечки обозначающей расширения преобразуется в [^.]*
//это позволяет точно определить факт корректности расширения
// например: 
 
"*.t*" => ^.*\\.t[^.]*$
 
// из двух имен: "name_.txt.bar" и "name.txt"
// под маску подходит только и только  "name.txt"
 
//если бы было бы просто "^.*\\.t.*$", тогда и первое имя тоже подошло бы, 
//что является неверным согласно логике работы с масками.

Проблема начинается вот с этой маской:

Code
1
2
3
4
5
6
7
8
9
".*"  => ^\\.[^.]*$
 
// так как после точечки обозначающей расширение, звездочка преобразуется в [^.]*
// то получаем вот такую маску.
 
// проблема в том, что под маску вида: ".*" должно подойти имя ".name.txt"
// однако регекспу это не подходит, 
// потому что согласно регекспу после точечки не должно быть других точечек
// здесь просится "^\\..*"
Сейчас я отдельно обрабатываю случай маски ".*"
Но не хотелось бы превращать работу с регекспами в обработку "частных случаев".

Как это делается правильно?

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

Вот например, файловая маска: ".t*"
И два имени: ".txt.bar" ".txt"

Должны ли оба эти имени подойти под маску? Или только последнее?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2015, 03:08
Ответы с готовыми решениями:

std::regex и boost::regex
Что-то я не пойму что реализация их различна ? #include <iostream> #include <string> //#include <regex> //using...

Пользовательская маска и маска по умолчанию
Всем привет! Подскажите, пожалуйста, в чём разница между пользовательской маской и маской по умолчанию%-)? Заранее спасибо за ответ

Файловая БД
Здравствуйте уважаемые форумчане и состав администрации. Вопрос в том как удалить 1 запись в 2-х типизированных файлах? Если быть точнее...

3
 Аватар для mat_for_c
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
09.02.2015, 13:57
Цитата Сообщение от hoggy Посмотреть сообщение
Должны ли оба эти имени подойти под маску?
да

Цитата Сообщение от hoggy Посмотреть сообщение
Проблема начинается вот с этой маской:
а нельзя самому написать
Цитата Сообщение от hoggy Посмотреть сообщение
"^\\..*"
1
 Аватар для orange_fox
34 / 34 / 8
Регистрация: 06.04.2014
Сообщений: 189
09.02.2015, 14:06
1. Посмотри на glob шаблоны в UNIX.
2. Либо напиши свои и задай им четкий набор правил, чтобы было лекго преобразовать в регулярки.
Например:
Code
1
2
3
4
5
6
7
* означает сколько угодно любых символов, кроме того, какой идет справа от звездочки:
* = /^.*$/
f*.txt = /^f[^.].*\.txt$/
file* = /^file.*$/
# всегда означает один символ
# = /./
И т.д.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.02.2015, 14:25  [ТС]
Цитата Сообщение от mat_for_c Посмотреть сообщение
а нельзя самому написать
Можно.

Есть возможность работать с файловой маской.
И есть возможность указать регулярку.

Цемес в том, что раз есть возможность работать с файловой маской, стало быть работа должна быть отлаженной, что бы не возникало никаких неоднозначностей.
Цитата Сообщение от orange_fox Посмотреть сообщение
1. Посмотри на glob шаблоны в UNIX.
2. Либо напиши свои и задай им четкий набор правил, чтобы было лекго преобразовать в регулярки.
Ну вот я сейчас сделал так:

маска игнорирования ".*" проигнорирует любые имена которые начинаются с точечки, независимо от того, есть ли там ещё точечки, или нет

маска "*.t*" проигнорирует только те имена,
у которых есть расширение (начинается только после последней точечки),
которое начинается с буковки t

В принципе, так оно вроде бы выглядит вполне себе логично.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2015, 14:25
Помогаю со студенческими работами здесь

файловая система
Дано целое число K>0 и текстовый файл. Создать 2 файла: текстовый, содержащий 1-е K символов каждой строки исходного файла, и символьный,...

Файловая система на C++
Привет всем))) Ребят, у меня стоит задача - написать свою файловую систему на С++)) Но вот с чего начать, что делать я вообще не знаю))...

Файловая оболочка
Уважаемые товарищи,прошу помочь мне реализовать такой проект на языке C: Файловая оболочка. * Навигация по дереву...

Файловая система
В учебниках не нашел такого момента. У меня есть два String А и Б. А я копирую в файл "input.txt" который находится в той же...

Файловая система
Посчитать количество слов,содержащих от 3 до 6 букв, в данном файле(путь к файлу-в командной строке)


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru