I'm trying to use a regular expression to erase only the matching part of an string. I'm using the preg_replace
function and have tried to delete the matching text by putting parentheses around the matching portion. Example:
preg_replace('/text1(text2)text3/is','',$html);
This replaces the entire string with '' though. I only want to erase text2, but leave text1 and text3 intact. How can I match and replace just the part of the string that matches?
Use backreferences (i.e. brackets) to keep only the parts of the expression that you want to remember. You can recall the contents in the replacement string by using $1
, $2
, etc.:
preg_replace('/(text1)text2(text3)/is','$1$2',$html);
There is an alternative to using text1
and text3
in the match pattern and then putting them back in via the replacement string. You can use assertions like this:
preg_replace('/(?<=text1)(text2)(?=text3)/', "", $txt);
This way the regular expression looks just for the presence, but does not take the two strings into account when applying the replacement.
http://www.regular-expressions.info/lookaround.html for more information.
Try this:
$text = preg_replace("'(text1)text2(text3)'is", "$1$2", $text);
Hope it works!
Edit: changed \\1\\2
to $1$2
which is the recommended way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With