Здравствуйте. Подскажите как составить правило что бы вырезать ненужную часть строки. Собственно задача такая. Есть строка PHP: $data = "Код товара:{n}004128{n}Производитель:{n}LED SOLUTION{n}Тип лампы{n}P22d{n}Цоколь{n}HB4{n}Напряжение {n}12V{n}Тип св. элемента{n}SMD 3535{n}Количество св. элементов{n}21{n}Обманка (Canbus){n}Нет{n}Драйвер (cтабилизатор напр.){n}Нет{n}Цвет{n}Белый"; Далее нужно через фунцию PHP: $data = preg_replace("", "", $data); Составить выражение которое будет отрезать от строки все что идет после пятого {n} Выбрано preg_replace поскольку после какого вхождение вырезать приходит от пользователя и мне показалось что регулярка это то что нужно для такой задачи. Но уже битый час не могу найти как составить правило что бы оно брало не первое вхождение, а второе или третье. Если если есть предложение как решаются такие задачи то тоже рад буду услышать. Возможно я вообще решаю эту задачу не через то место. Заранее спасибо.
PHP: $num = 5; $data = preg_replace('~^(?:.*?\{n\}){'.$num.'}\K.*~s', '', $data); Хотя тут вполне достаточно explode, implode. PHP: $data = "Код товара:{n}004128{n}Производитель:{n}LED SOLUTION{n}Тип лампы{n}P22d{n}Цоколь{n}HB4{n}Напряжение {n}12V{n}Тип св. элемента{n}SMD 3535{n}Количество св. элементов{n}21{n}Обманка (Canbus){n}Нет{n}Драйвер (cтабилизатор напр.){n}Нет{n}Цвет{n}Белый"; $num = 5; $data = explode('{n}', $data, $num + 1); print_r($data); unset($data[$num]); echo implode('{n}', $data);
здравствуйте. Почти так и решил через PHP: $rez = explode('{n}', $data); $rez = array_splice($rez, 0,$i); $rez = implode('{n}', $rez); такой же ответ нашел в интернете , но я не знаю настолько решение через массив правильно. Так же в ответах проскакивало что можно использовать регулярные выражения и это кажется более логичным в таком случаи. Но как составляется правило в котором можно указать любой совпадения по счету я так и не нашел. А как по мне это довольно интересная возможность и хотелось бы научится. Ваш пример с регулярным работает, попробую разобрать его. Благодарю !
PHP: $re = '/^(.*?{n}){5}\K.*/'; $str = 'Код товара:{n}004128{n}Производитель:{n}LED SOLUTION{n}Тип лампы{n}P22d{n}Цоколь{n}HB4{n}Напряжение {n}12V{n}Тип св. элемента{n}SMD 3535{n}Количество св. элементов{n}21{n}Обманка (Canbus){n}Нет{n}Драйвер (cтабилизатор напр.){n}Нет{n}Цвет{n}Белый'; print preg_replace($re, '', $str);
https://www.php.net/manual/ru/regexp.reference.escape.php Там в самом последнем абзаце есть про сброс начала совпадения с помощью \K.