Подтвердить что ты не робот

Preg_replace, как заменить только шаблон xxx ($ 1) yyy внутри селектора

Я пытаюсь использовать регулярное выражение для удаления только соответствующей части строки. Я использую функцию preg_replace и пытаюсь удалить соответствующий текст, поместив круглые скобки вокруг соответствующей части. Пример:

preg_replace('/text1(text2)text3/is','',$html);

Это заменяет всю строку на ''. Я хочу только стереть text2, но оставить text1 и text3 неповрежденными. Как я могу совместить и заменять только ту часть строки, которая соответствует?

4b9b3361

Ответ 1

Существует альтернатива использованию text1 и text3 в шаблоне совпадения, а затем повторное включение обратно через заменяющую строку. Вы можете использовать утверждения следующим образом:

preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);

Таким образом, регулярное выражение выглядит только для присутствия, но при применении замены не учитывается две строки.

http://www.regular-expressions.info/lookaround.html для получения дополнительной информации.

Ответ 2

Используйте обратные ссылки (т.е. скобки), чтобы сохранить только те части выражения, которые вы хотите запомнить. Вы можете вспомнить содержимое в заменяющей строке с помощью $1, $2 и т.д.:

preg_replace('/(text1)text2(text3)/is','$1$2',$html);

Ответ 3

Попробуйте следующее:

$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);

Надеюсь, что это сработает!

Изменить: изменено \\1\\2 на $1$2, что является рекомендуемым способом.

Ответ 4

Простейшим способом было упомянуто несколько типов. Еще одна идея - смотреть или смотреть назад, они на этот раз слишком переполнены, но часто весьма полезны.