@nikitoshq

Как вытянуть данные из строки через регулярные выражения PHP?

Есть массив с такими строками:

3924 Ламінат Parfe Floor 7/32 Дуб Мірандо (2,663)/10шт
8199 Ламінат 8 Variostep Classic Дуб Альпійський (2,22м2)/9 шт.
8766 Акція Ламінат 8 Венге Кіото (2,22м2)/9 шт.
К395 Акція Ламінат 8 Дуб Торнадо (2,22 м2)/9 шт.
34 818 Ламінат The BRUSH 8 Дуб Бежевий (1,996 м2)/8шт
31 506 (32 065) Ламінат Neutral 4V (Trend world) Дуб Монумент (Дуб Дерби) (1,996 м2)/8шт
27 610 (41404 (8мм) Ламінат Discovery 4V 10/32 Дуб Верден сніжний (1,646 м2)/8 шт
145 Ламінат Vitality Style Aqua Protect 4V 8/32 Дуб Модерн Білий
33 680 Ламінат Extr. dynamic 8 Старий дуб Полліно фас. (1,996 м2)/8шт
53 687 Ламінат Ambience 4V WR 10/33 Wolta Oak (1,624 м2)/8шт.

Из него нужно вытянуть данные. Пример:
Из строки "3924 Ламінат Parfe Floor 7/32 Дуб Мірандо (2,663)/10шт" получить артикул "3924", коллекцию "Parfe Floor 7/32" и цвет "Дуб Мірандо", то что в скобочках - игнорировать. Понимаю что это нужно сделать через регулярные выражения, но не как не получается его составить.
  • Вопрос задан
  • 98 просмотров
Решения вопроса 2
dollar
@dollar
^(К?[0-9, ()м]+) (?:Ламінат|Акція Ламінат) ([A-Za-z0-9\/( .]*[\d)]) (.+?)(?: \(\d|\s*$)

https://regex101.com/r/1PgPNP/5
Ответ написан
@dzhebrak
Еще, как вариант, можно привязаться к тому, что коллекция указывается латиницей, а цвет - кириллицей:

^(К?[0-9\s]+).*?Ламінат\s([\w\s()\/.]+)\s([\p{L}\s.]+)

https://regex101.com/r/4po1IS/2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kianl
@Kianl
Печальный веб-разработчик
А для чего вам это делать? Я думаю, это неправильный подход, потому что данные изначально смешаны друг с другом.
Разделите все данные и поместите в двумерный массив, тогда вы сможете без танцев с бубном достать все, что нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 сент. 2020, в 12:04
1000 руб./в час
19 сент. 2020, в 11:59
20000 руб./за проект
19 сент. 2020, в 11:26
17500 руб./за проект