REGEX
Набор
шаблонов для анализа и выборки алгоритмом нужных типов файлов
структура
файла regex.txt
1. Анализ
побайтно
Пример
файла wmv http://en.wikipedia.org/wiki/Windows_Media_Video
открываем
в TotalСommander или FAR файл по F3 в HEX режиме и смотрим заголовок файла
Код:
в виде символов
80C000 b ^0& wmv;VIDEO;ALL
или побайтно в 16-ричном формате
80C000 b
\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA wmv;VIDEO;ALL
^ ^ ^ ^ ^
1 2 3 4 5
|
1 - цвет
файла в RGB (80C000)
2 - символ b - определение будет побайтно
3 - характерный кусок заголовка файла (сигнатура). Могут быть не первыми
байтами файла, но из потока гарантированно загружается только 128 байт. Можно
писать как в виде символов так и побайтно в HEX формате разделяя символом \,
предпочтительнее и более точный - последний. Прежде чем добавить собственный
формат, проанализируйте несколько файлов, найдите в заголовке набор
одинаковых байт (читай символов)...
4 - расширение файла.
5 - группы в которые входит файл (перечислять через символ ";")
2. Анализ
на MIME-тип (менее эффективен)
символ t -
проверка на MIME-тип, что в некоторой степени имеет отношение к расширению
файла, хотя абсолютно жесткой связи тут нет (для одного расширения часто
существует несколько MIME-типов, и наоборот один MIME-тип может охватывать
сразу несколько файловых расширений).
Цитата:
80C000 t
^video/x-ms-wmv wmv;VIDEO;ALL
80C000 t
^video/x-ms-asf wmv;VIDEO;ALL
80C000 t
^video/wmv wmv;VIDEO;ALL
|
Подробнее
о MIME типах
http://html.manual.ru/book/info/mimetypes.php
http://www.chem.msu.su/rus/wwwbook/mime.html
http://ru.wikipedia.org/wiki/MIME
Более сложные конструкции
в zip, rar, ace, 7z и uha архивах ищит следующие расширения типов файлов, при
условии что имена файлов в архиве не шифрованы...
все архивы получат расширение rar, при открытии архивов в TotalCommander тип
архива автоматически определяется по заголовку, проблем с открытием и
распаковкой быть не должно...
Код:
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(jpg|jpeg) jpg.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.mp3 mp3.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.mp4 mp4.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.ogg ogg.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.wmv wmv.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.avi avi.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.divx divx.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(mpg|mpeg) mpg.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.vob vob.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.mov mov.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.iso iso.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.mdf mdf.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.nrg nrg.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.pdf pdf.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.djvu djvu.rar;All;FAV
|
можно
сгруппировать таким образом
Код:
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(jpeg|jpg) JPG.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(mp3|ogg|wma) MP3.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(mp4|wmv|avi|divx|mpg|mpeg|mov|vob)
VID.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(iso|mdf|nrg) IMG.rar;All;FAV
008000 b
^(PK|Rar!|.......\*\*ACE|7z|UHA).*\.(pdf|djvu) BOOK.rar;All;FAV
|
Выборка mp3 по жанрам либо по исполнителю, применимо
только к mp3 с ID3v2 так как ID3v1 хранит тэг в конце файла
виды
жанров музыки можно посмотреть в winamp, открыв свойства тэга в любом mp3
файле
Код:
Блокирование файлов
Код:
Выборка по ключевым словам в
архивах, опять же при условии что имена файлов в архиве не шифрованы
Код:
Выборка фотографий с тэгом Exif
Код:
Документации
по регулярным выражениям в интернете полно, ищите по словам "regex"
или "regular expressions"
Например http://ru.wikipedia.org/wiki/Регулярные_выражения
Далее описаны
несколько элементов, часто употребляемых в регулярных выражениях.
Применяемые
для задания соответствия символу:
. -
соответствует любому одиночному символу (например выражение ".arry"
может соотвествовать и Larry и Barry и др);
\d -
соответствует любой цифре (например выражение "\d\d" соотвествует
любому числу от 0 до 99);
[набор_символов]
- задает соответствие любому символу из указанного набора_символов (например
"[a-f0-9]");
[^набор_символов]
- задает соответствие любому символу, за исключением тех, что входят в
указанный набор_символов (например "[^k-z]" соответсвует любой
букве от k до z);
\xn - где
n - шестнадцатеричное число, обязательно состоящее из двух цифр.
Соответствует символу с шестнадцатеричным кодом n (например, \x41
эквивалентно "A");
Специальные
символы, которые позволяют задавать соответствие не одиночному символу, а
некоторому количеству символов:
* -
соответствует повторению предшествующего символа ноль и более раз. Например,
«go*gle» соответствует ggle, gogle, google, gooooooogle и др;
? -
соответствует повторению предшествующего символа ноль или один раз. Например,
«colou?r» соответствует и color, и colour.
+ -
соответствует повторению предшествующего символа один и более раз. Например,
«to+» соответствует to и too, но не tooo и не t.
{n} - где
n это положительное целое число. Соответствует точно n-ному количеству
повторений. Например, "o{2}" не соответствует 'o' в
"Bob", но соответствует 2-м символам 'o' в "сool".
{n,m} -
где n и m это положительные целые числа, причем n < m. Соответствует хотя
бы n-ому, но не более чем m-ому числу повторений. Например,
"o{1,3}" соответствует первым трем 'o' в "fooooood".
Применяются
также спецсимволы, указывающие на допустимое положение найденного
соответствия:
^ -
указывает что найденный текст должен быть в начале строки;
$ -
указывает что найденный текст должен быть в конце строки.
Другие
полезные символы и комбинации:
Символ
вариации '|' используют для того чтобы допустить выбор между двумя и более
вариантами. Например, "PK|Rar!" соответствует "PK" или
"Rar!";
(?i) -
указывает что последующие конструкции регулярного выражения будут
нечувствительны к регистру букв.
|