Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Поиск диапазона чисел через регулярные выражения

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Tue Dec 02, 2008 04:33    Post subject: Поиск диапазона чисел через регулярные выражения Reply with quote

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

Есть много файлов с именами вроде abcd_0000.*
Нужно найти файлы всех типов в диапазоне c 4300 по 4599 включительно.

Почитав всевозможные справки по регэкспам, уяснил следующее:

- имеем множество символов, т.е. []
- имеем группы символов, т.е. [4300-4500]
- имеем др.необязательные символы, т.е. [.*_43??-.*_45??] в т.ч. всякие "слэш-точки-звёздочки".

В итоге перепробовал все возможные комбинации и дошёл до страшных конструкций-исключений, вроде [????_4???\.*|????_4[1267890]??\.*] но так ничего не получилось.
Ближе всех оказалась конструкция
Code:
*_4*|*_4[1267890]*
(так хоть что-то находилось :)

Возможно ли вообще выполнение поставленной задачи для чисел ?
Спасибо.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Tue Dec 02, 2008 10:36    Post subject: Reply with quote

Навскидку должно работать:
Code:
abcd_4[3-5][0-9][0-9]

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Tue Dec 02, 2008 13:20    Post subject: Reply with quote

Спасибо за наводку,
сработала даже сокращенная конструкция:
Code:
_4[3-5]

Поскольку файлов *_44* в списке вообще не оказалось, для правильности использовал маску:
Code:
_4[3|5]

Также хорошо работает просто правило исключения:
Code:
_4[^0126789]
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Tue Dec 02, 2008 13:57    Post subject: Reply with quote

kadvlad wrote:
Поскольку файлов *_44* в списке вообще не оказалось, для правильности использовал маску:
Code:
_4[3|5]

Это не совсем правильная маска. В данном случае она работает, но если бы существовало имя файла "_4|3", она бы его тоже поймала. Если нужно перечисление, его следует заключать в круглые скобки, а не в квадратные (подробнее см. в справке TC).
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Tue Dec 02, 2008 14:53    Post subject: Reply with quote

CaptainFlint
Спасибо, но я вас не понял:
Quote:
если бы существовало имя файла "_4|3", она бы его тоже поймала.

Специально создал в той же папке файлы _3000 и 3000 -- маска их не поймала, ведь в маске после 4 стоит [ как начало множества.
И справка так пишет:
Quote:
В качестве первого варианта воспринимается всё от предыдущего метасимвола '(' или '[' или от начала выражения до первого метасимвола '|', в качестве последнего — всё от последней вертикальной черты '|' до конца выражения или до ближайшего метасимвола ')'.

Т.е. конструкция _4[3|5] рассматривает файлы, начинающиеся с _4 и далее содержащие 3 или 5.

Справка:
Quote:
Пример: по вариантам (Иоанн|Иаков|Пётр) обнаруживается одно из имён: Иоанн, Иаков или Пётр.
[бак|бок|бук] означает ровно то же самое что и [баоук|].

Т.е. в моём случае конструкции _4(3|5) и _4[35|] одинаково найдут все файлы, начинающиеся с _4 и далее содержащие 3 или 5, так?
Вот это непонятно. Получается то же, что и в моём варианте. Не вижу разницы (?)
Возможно, есть какая-то специфика использования квадратных и круглых скобок?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Tue Dec 02, 2008 15:09    Post subject: Reply with quote

kadvlad wrote:
Возможно, есть какая-то специфика использования квадратных и круглых скобок?

Есть. Квадратные скобки перечисляют не варианты подстрок, а единичные символы.

kadvlad wrote:
Т.е. конструкция _4[3|5] рассматривает файлы, начинающиеся с _4 и далее содержащие 3 или 5.

Нет. Конструкция _4[3|5] рассматривает файлы, начинающиеся с _4 и далее содержащие 3, или символ вертикальной черты, или 5. Именно поэтому [3|5] означает то же самое, что [35|]. Чтобы там было только 3 или 5, нужно использовать либо _4[35], либо _4(3|5).


А вот по поводу цитаты из справки:
Quote:
В качестве первого варианта воспринимается всё от предыдущего метасимвола '(' или '[' или от начала выражения до первого метасимвола '|'

это, похоже, просто ляп. С ним я разберусь и, если он не соответствует истине, поправлю описание.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Tue Dec 02, 2008 15:41    Post subject: Reply with quote

CaptainFlint,

Спасибо за содействие.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group