PHP - как выделить именах файлов общие корни-маски?

Есть много файлов с именами:

file_des_2020051000_.txt
ptrfile_2020012120_.txt
msk_fin_2020451000_.txt
file_des_20200701_.txt
ptrfile_232342.txt

Как выделить-сгруппировать из всех имен файлов общие маски? Определить их и сгруппировать. Итог должен быть:

file_des_20200.*
ptrfile_2.*
file_des_20200701_.txt
msk_fin_2020451000_.txt

Подтолкните на мысль пожалуйста.


Ответы (1 шт):

Автор решения: Gleb Oleynik

Можно разбивать имена файлов на части, например по символу "_". Далее считать число вхождений, позицию вхождений и на основе частотности уже формировать символьную маску.

Потом брать одну символьную маску, отбирать файлы относящиеся к ней и считать цифровую часть маски посимвольно. Например, 2, потом 20, потом 2020 и уже на основании некоего порога вхождения в именах файлов уже формировать числовую маску. Числовую маску посимвольно проверять только на начало числовой части, не брать любое вхождение. Вхождение в середине числа не нужно. Далее просто склеивать символьную и числовую в итоговую маску.

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

→ Ссылка