View previous topic :: View next topic |
Author |
Message |
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Tue Dec 02, 2008 04:33 Post subject: Поиск диапазона чисел через регулярные выражения |
|
|
Друзья,
подскажите, пожалуйста, как правильно организовать поиск диапазона чисел в именах файлов.
Есть много файлов с именами вроде abcd_0000.*
Нужно найти файлы всех типов в диапазоне c 4300 по 4599 включительно.
Почитав всевозможные справки по регэкспам, уяснил следующее:
- имеем множество символов, т.е. []
- имеем группы символов, т.е. [4300-4500]
- имеем др.необязательные символы, т.е. [.*_43??-.*_45??] в т.ч. всякие "слэш-точки-звёздочки".
В итоге перепробовал все возможные комбинации и дошёл до страшных конструкций-исключений, вроде [????_4???\.*|????_4[1267890]??\.*] но так ничего не получилось.
Ближе всех оказалась конструкция (так хоть что-то находилось :)
Возможно ли вообще выполнение поставленной задачи для чисел ?
Спасибо. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 02, 2008 10:36 Post subject: |
|
|
Навскидку должно работать:
Code: | abcd_4[3-5][0-9][0-9] |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Tue Dec 02, 2008 13:20 Post subject: |
|
|
Спасибо за наводку,
сработала даже сокращенная конструкция:
Поскольку файлов *_44* в списке вообще не оказалось, для правильности использовал маску:
Также хорошо работает просто правило исключения: |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Tue Dec 02, 2008 13:57 Post subject: |
|
|
kadvlad wrote: | Поскольку файлов *_44* в списке вообще не оказалось, для правильности использовал маску: |
Это не совсем правильная маска. В данном случае она работает, но если бы существовало имя файла "_4|3", она бы его тоже поймала. Если нужно перечисление, его следует заключать в круглые скобки, а не в квадратные (подробнее см. в справке TC). _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Tue Dec 02, 2008 14:53 Post subject: |
|
|
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 |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6151 Location: Москва
|
(Separately) Posted: Tue Dec 02, 2008 15:09 Post subject: |
|
|
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 |
|
|
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Tue Dec 02, 2008 15:41 Post subject: |
|
|
CaptainFlint,
Спасибо за содействие. |
|
Back to top |
|
|
|
|
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
|