Preg_replace, как заменить только шаблон xxx ($ 1) yyy внутри селектора
Я пытаюсь использовать регулярное выражение для удаления только соответствующей части строки. Я использую функцию preg_replace
и пытаюсь удалить соответствующий текст, поместив круглые скобки вокруг соответствующей части. Пример:
preg_replace('/text1(text2)text3/is','',$html);
Это заменяет всю строку на ''. Я хочу только стереть text2, но оставить text1 и text3 неповрежденными. Как я могу совместить и заменять только ту часть строки, которая соответствует?
Ответы
Ответ 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
Простейшим способом было упомянуто несколько типов. Еще одна идея - смотреть или смотреть назад, они на этот раз слишком переполнены, но часто весьма полезны.