preg_replace() Заменить только первую подмаску

116
10 сентября 2019, 00:00

У меня есть рег. выражение:

(\s*\S+\s\S+,\s*)([^<]*<\/td>\s+<\/tr>)

И есть массив строк таблицы, который лежит в переменной $trs3.

Мне нужно с помощью рег выражения заменить на пробел в каждой строке таблицы только то, что что соответствует: (\s*\S+\s\S+,\s*)

Насколько я понимаю, мне нужно получить matches[1]? Я пытаюсь использовать preg_replace(), т.к. эта функция позволяет искать по массиву. Но я нигде не нашла упоминаний, что в ней можно применять matches[1].

А preg_match_all, насколько я понимаю, только со строкой работает. Применить ее к каждой строке массива, лежащего в $trs3, мне решительно не хватает ума, ибо я новичок в пхп.

Подскажите, как можно решить мою задачу?

Answer 1

Используйте

$massiv_strok = preg_replace('~\s*\S+\s\S+,\s*([^<]*</td>\s+</tr>)~', ' $1', $massiv_strok);

Смысл в том, что захватываемая подмаска нужна только для того текста, который требуется оставить как есть. В данном случае первая подмаска лишняя, её необходимо удалить, а шаблон замены нужно исправить на ' $1', где $1 — обратная ссылка на значение первой захватывающей подмаски.

READ ALSO
как сформировать многомерный json код на php

как сформировать многомерный json код на php

возникла необходимость вывести произвольную таксономию в json

145
Какие есть хуки/фильтры для указания скидки товару woocommerce?

Какие есть хуки/фильтры для указания скидки товару woocommerce?

Всем привет! Вопрос на засыпку: какие есть хуки/фильтры для указания скидки товару? Те

104
Как отправить выбранный чекбокс

Как отправить выбранный чекбокс

Есть код, который отправляет введенное значение input в базуНо необходимо еще, чтобы в базу отправлялся один из выбранных чекбоксов

123
Не парсит кириллицу PHP

Не парсит кириллицу PHP

Есть PHP парсер на библиотеке DiDOMНастроен был на одном тестовом сервере, работал

104