Size: a a a

2021 July 11

U

UsernameAK in supapro.cxx
пипец, туплю на очень простой задаче жёстко
источник

U

UsernameAK in supapro.cxx
есть вайлдкард, в нём всего два вида спецсимволов: ~ (может идти только первым символом, матчит некий константный префикс, и если его нет, возвращает false) и * (любое количество символов подряд, кроме слеша)
если ~ нет, то матчится только конец строки
источник

@N

@urandon Nikita Khom... in supapro.cxx
А задача в чём?
источник

U

UsernameAK in supapro.cxx
вообще отфильтровать файлы по подобным критериям
источник

@N

@urandon Nikita Khom... in supapro.cxx
Есть примеры вайлкардов с тильдой? По описанию не очень понятно
источник

АК

Александр Караев... in supapro.cxx
Кажется, что можно заменять тильду на константный префикс, а потом регуляркой. Или сначала проверять/обрезать у файлов префикс, если есть ~, а уже потом регуляркой
источник

@N

@urandon Nikita Khom... in supapro.cxx
Регулярка это из пушки по воробьям. Должно быть решение сильно проще, но мне пока синтаксис с тильдой непонятен
источник

U

UsernameAK in supapro.cxx
я могу примеров накинуть
пусть константный префикс (по сути, это путь родительского фильтра) будет /data/
~*.png матчит /data/image.png, но не /data/test/image.png
/data/*.dat матчит /data/test.dat, но не /data/test/test.dat
xxx/*.bin матчит /data/xxx/test.bin и /data/yyy/xxx/test.bin, но не /data/xxx/yyy/test.bin
источник

U

UsernameAK in supapro.cxx
и да, /data/axxx/test.bin последний не заматчит
источник

U

UsernameAK in supapro.cxx
да, логика говорит, что можно тильду заменять на нужный путь, но мне больше интересует последнее
источник

U

UsernameAK in supapro.cxx
на второй можно вообще забить
источник

АК

Александр Караев... in supapro.cxx
Да, ты прав. Если там из особых элементов только *, можно обойтись самописной функцией. Но если нет особых требований по перфу, регулярка будет короче
источник

U

UsernameAK in supapro.cxx
главное, что я не понимаю - а как звёзды матчить?
источник

U

UsernameAK in supapro.cxx
так чтобы вот это правило соблюдалось
источник

U

UsernameAK in supapro.cxx
ну и * работать должна только внутри своего сегмента пути
источник

U

UsernameAK in supapro.cxx
грубо говоря, ~ исключает промежуточные сегменты пути между родителем и путём который матчится
источник

U

UsernameAK in supapro.cxx
* должно работать как регулярка [^/]*
источник

U

UsernameAK in supapro.cxx
можно конечно забить болт и захуярить регулярку...
источник

@N

@urandon Nikita Khom... in supapro.cxx
- разбиваешь строку на блоки по слешам (раз * их не матчит)
- для каждого блока у тебя есть либо *, либо константная подстрока (а ~ я так и не понял, чем отличается от ^[^/]* на регулярках, и поэтому разницы с * для первого сегмента не вижу)
- идешь и в режиме backprop в блоке справа налево пытаешься находить константные подстроки в нужном порядке (можно ещё добавить алгоритмы поиска подстрок, z-функции и тп, но уже на этапе оптимизаций)
источник

@N

@urandon Nikita Khom... in supapro.cxx
Если в 3м пункте смог нужным образом выделить подстроки в нужном порядке — блок заматчился, проверяешь следующий. Иначе не матчится
источник