Far 2.0 - regexp

Разработка Far.
Post Reply
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Far 2.0 - regexp

Post by t-rex »

Используя RegExp библиотеку любезно предоставленную Костей Ступником фар 1.8 build 638 теперь умеет RegExp.
Синтакс такой же как в плагине S&R (описано в его хэлпе, надо будет скопировать).
Начинаем по мелкому, пока что в АПЙ этого нету но зато добавил поддержку RegExp в файловые маски.
Это значит что теперь в любом месте где задаются маски можно использовать RegExp - например фильтры, поиск файлов, ассоциации, select.
Так как функционал прозрачен то все плагины которые юзают АПЙ масок получают RegExp за бесплатно.
Теперь о прозрачности: regexp должен задаватся в /regexp/ - т.е. идёт простая проверка, если первый символ маски это / то это regexp.
По умолчанию regexp регистро-зависимые, если надо наоборот то /regexp/i (ну как обычно короче).
В тех местах где поддерживается маска исключения тоже можно использовать regexp (или маску), с любой из сторон |.
Если нужно точное соответсвие между RegExp и строкой то /^regexp$/.
Примеры:

Code: Select all

/(eng|rus)/i
/(eng|rus)/i|/.*(a|b)/i
*.lng|/(eng|rus)/i
/(eng|rus)/i|*.lng
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Чёт пока сами RegExp не работают как надо, разбираемся.
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Ох блин, запутали тут меня, спать надо наверно уже, всё работает нормально (есть проблема тока с национальными буквами в []). Ну и для масок, делается Match как в перле - т.е. строка совпадёт с regexp только если совпадение идёт с первого символа. Повидение можно поменять, чтоб вместо Match делался Search - т.е. искалось соот. regexp в строке. Что вам надо?
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Примеры:
file.ext == /file/
file.ext != /ext/
file.ext == /.*ext/
User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Far 1.8 - regexp

Post by Andrey Budko »

регекспы в базовом функицонале поддерживаю. но надо как то вынести наружу. сишарпники должны подсказать базовое элементарное АПИ.
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Andrey Budko
Ну само собой что будет наружу, я просто за один день всё не успел.
А АПЙ там будет простое, примерно так, re *r = Create(); Compile(r, "/regexp/"); Match(r, "str", p_strend, match_array, n_matches)
и такой же Search()
там особо больше ничего и нет.
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Да, наверно в масках надо Match поменять на Search а то как то не привычно.
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Короче и проблем с национальными буквами вроде нет. :) Короче, играйтесь.
User avatar
Tim Sobolev
Posts: 715
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Tim Sobolev »

t-rex wrote:Да, наверно в масках надо Match поменять на Search а то как то не привычно.
Скорее всего да, так как есть возможность сделать Match через Search с "^" в начале
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Centaur »

Как оно будет работать с юникодом? То есть, будет ли \w эквивалентно [0-9A-Za-z_] или объединению категорий Letter и Number? Поддерживает ли библиотека POSIX-классы символов ([[:alpha:]]) и/или Perl’овые character properties \p{IsAlpha}?
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Centaur wrote:То есть, будет ли \w эквивалентно [0-9A-Za-z_] или объединению категорий Letter и Number?
Не знаю, проверь. Я думаю там проверка на IsAlphaNum.
Centaur wrote:Поддерживает ли библиотека POSIX-классы символов ([[:alpha:]]) и/или Perl’овые character properties \p{IsAlpha}?
Нет.
User avatar
John Doe
Бюрократ
Posts: 13075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 42 times
Been thanked: 319 times

Re: Far 1.8 - regexp

Post by John Doe »

t-rex wrote:Используя RegExp библиотеку любезно предоставленную Костей Ступником фар 1.8 build 638 теперь умеет RegExp.
В multiarc уже используется PCRE. Как-то неправильно поддерживать две разные библиотеки...
https://t.me/FarManager — Telegram чат
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

John Doe
В мультиарке это было давно и не правда, да и pcre с юникодом нормально тока в utf8 работает а Костина либа проще и уже работает.
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

1. сделал Search в место Match, так логичней и привычней.
2. re для масок теперь по умолчанию регистро-НЕзависимые, если вдруг надо зависимые то
ввёл новый параметр /regexp/c
User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Centaur »

Ой, что-то мне как-то не нравится направление. Есть стандарт POSIX на регулярные выражения, есть де-факто стандарт на perl-compatible регулярные выражения, они оба unicode-aware, зачем придумывать что-то ещё?

Поглядел в код. Вроде бы базовые вещи (\s \w) будут правильно работать с юникодом. Но без поддержки Unicode Character Properties плохо.
Post Reply

Return to “Development”