Как вырезать название файла и разбить на переменные через регулярные выражения?
Всем привет. У меня не совсем стандартная задача по регуляркам. В регулярках нуб, по этому прошу помощи. Имеются названия файлов:
Необходимо вырезать из загружаемого файла название и с помощью регулярных выражений его обрезать по следующему сценарию:
02. ГудВин[Герои Комиксов] — Орут сирены(фристайл)
12. Стильный Билли feat. aka Ахмед — Чисто ё (Стильный Билли prod.)
04.Nuttkase feat. Птаха — Если Друг (Хасол-Версия) (Phunk Masta Seven prod.)
02.Dr.MokRolog,Old Primus,JustSmile,Vine Bi — Электрограч (Pro100 Beatz prod.)
Необходимо вырезать из загружаемого файла название и с помощью регулярных выражений его обрезать по следующему сценарию:
Тоесть на выходе должны иметь
- Если название начинается на «01.» (цифры и точка, вырезаем их)
- Берём содержимое до пробела и до дефиса " -", это сохраняем в поле artist
- Берём содержимое после дефиса и пробела "- ", сохраняем это в поле name
- После названия в большинстве случаев идут либо скобки "( )", либо квадратные скобки "[ ]", а иногда скобки повторяются. Возможно ли в таком варианте первые закрывающиеся скобки добавлять к имени файла, а последние брать и вставлять в поле beatmaker?!
$artist = 'Стильный Билли';
$feat = 'aka Ахмед';
$name = 'Чисто ё';
$beatmaker = 'Стильный Билли';
вот так$artist = 'Nuttkase';
$feat = 'Птаха';
$name = 'Если Друг (Хасол-Версия)';
$beatmaker = 'Phunk Masta Seven';
и вот так$artist = 'Dr.MokRolog';
$feat = 'Old Primus,JustSmile,Vine Bi';
$name = 'Электрограч';
$beatmaker = 'Pro100 Beatz';
UPD: Обновил регулярку regex101.com/r/AD860D/2 сейчас то что надо, только не вырезается prod. Комментарии: 4
Начало положено. Такой регуляркой можно вырезать цифры с точкой от начала:
^\K\d{2,}.
Потом, видимо, использовать PHP функцию типа trim, удаляющую пробел справа в начале и можем работать дальше с такими записями:ГудВин[Герои Комиксов] — Орут сирены(фристайл)
Стильный Билли feat. aka Ахмед — Чисто ё (Стильный Билли prod.)
Nuttkase feat. Птаха — Если Друг (Хасол-Версия) (Phunk Masta Seven prod.)
Dr.MokRolog,Old Primus,JustSmile,Vine Bi — Электрограч (Pro100 Beatz prod.)
Осталось разобраться как теперь из этого вырезать нужное.
Вроде бы так должно работать.
function parseTrack($str) {
[$first_part, $second_part] = explode(' - ', $str);
$first_part = preg_replace('~^\d+\. ?~', '', $first_part);
[$artist, $feat] = explode(' feat. ', $first_part);
$feat = !empty($feat) ? explode(',', $feat) : null;
preg_match('~^(.*?)(?: \(([^(]+) prod.\))?$~', $second_part, $match);
return [
'artist' => $artist,
'feat' => $feat,
'name' => $match[1],
'beatmaker' => isset($match[2]) ? $match[2] : null
];
}
Проверил работу функции вроде бы хорошо подставляются данные в поля Артист и Участники, но вот в поле beatmaker ничего не подставляется, а в поле Название добавляется битмейкер со скобками:
Можно это как-то пофиксить?
43 (Павел Underground prod)Нужно чтобы в поле name битмейкер в скобках не подставлялся. А в поле beatmaker должен добавляться только битмейкер без скобок.
Можно это как-то пофиксить?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.