Колеги. Вот головы ломаю как разбить допустим вот такое описание Цвет - Золотой,Серый Стандарт связи 2G + 3G Количество SIM-карт 2 Экран Диагональ экрана 5.5 дюйма Разрешение экрана 1920x1080 Память и процессор Процессор MTK6737 + Mali-T720 Количество ядер 4 Частота процессора 1300 МГц Объём оперативной памяти 2 GB Объем встроенной памяти 16 GB Мультимедиа Задняя камера 13 Мп Лицевая камера 8 Мп Вспышка Светодиодная Функции камеры Автофокус Питание Емкость аккумулятора 3000 мА/ч на атрибуты. Думал регуляркой но везде поразному описание оформлено. Какие есть предложения? или только ручками?
Знаешь я вот посмотрел они почти все похожи. Думаю можно и регуляркой обойтись. Помоги тогда составить правильную регулярку хотя бы для одного элемента?
PHP: $test = "Цвет - Золотой,Серый Стандарт связи 2G + 3G Количество SIM-карт 2"; preg_match('# (?:цвет|окрашен)[-\ ]*(?P<color>[^'.PHP_EOL.']+) #xui', $test, $matches); var_dump($matches);exit;
Слушай а вот ест у меня регулярка она заменяет все теги на что угодно. только не могу разобраться как сделать что бы она заменяла теги на перенос строки ? знаю что это символ \n PHP: $test = preg_replace("(<[^<>]+>)", '\n', $test);
в смысле тег <br> в \n? PHP: $test = preg_replace('#<br\\\?>#', "\n", $html); --- Добавлено --- В общем по твоему примеру на разных сайтах по разному выглядит список Пробуй тогда вот это PHP: $test = "Стандарт связи 2G + 3G Цвет - Золотой,Серый Количество SIM-карт 2 Процессор MTK6737 + Mali-T720"; $pattern = [ '#(?:цвет|окрашен)[- ]*([^\n]+)#ui', '#(?:процессор|камень)[- ]([^\n]+)#ui', '#(?:.*(?:сим|sim))[^\d]*(\d+)#ui', ]; $replacement = [ 'color=$1', 'processor=$1', 'simcards=$1' ]; $result = preg_filter($pattern, $replacement, $test);
я щас пытаюсь с этим работать написал вот такие вот условия на каждый атрибут что нужен PHP: preg_match('#(?:цвет|окрашен)[-\ ]*(?P<color>[^'.PHP_EOL.']+)#xui', $test, $matches); $color = $matches[1]; preg_match('#(?:Стандарт\sсвязи)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $seti = $matches[1]; preg_match('#(?:Количество\sSIM-карт)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $sim = $matches[1]; preg_match('#(?:Диагональ\sэкрана|диагональ\sэкрана)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $diagonal = $matches[1]; preg_match('#(?:Количество\sядер)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $yader = $matches[1]; preg_match('#(?:Объём\sоперативной\sпамяти|оперативная\sпамять)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $memory = $matches[1]; preg_match('#(?:Задняя\sкамера|Основная\sкамера)[-\ ]*(?P<seti>[^'.PHP_EOL.']+)#xui', $test, $matches); $camera = $matches[1]; --- Добавлено --- но он почему то только выводит цвет Еще прикол в том что мне текст подается с тегами он как верстка я его обрабатываю вот таким способом PHP: $test = str_replace("</tr>", "|", $test); $test = strip_tags($test); $test = str_replace("|", "<br>", $test); А после этого пытаюсь регулярками вывести то что мне нужно. Но работает только с цветом почему то
ок --- Добавлено --- а как мне вывести значения по отдельности ну например вывести color. пробую так PHP: $result['color'] не получается
Нет, не так Ну вот посмотри на что похож текст которые получился? может на ini? Как раз для такого есть функция parse_ini_srting PHP: $result = parse_ini_string($result); echo $result['color'];