Reputation: 1089
I have these 3 strings:
$string = "his";
$str1 = "hi";
$str2 = "s";
So what I want to do is a regex that looks for hi
and replaces it. But! if there is s
in the string it won't be replaced. Like this.
preg_replace('/'.$str1.'^['.$str2.']/', "replace it with this", $string);
It's not working! (of course not, regex isn't my thing!)
As I said, I don't get this with regex. I want to find $str1
and if $str2
isn't in the string it won't be replaced.
Upvotes: -1
Views: 186
Reputation: 11586
I think you want to make multiple filters, like: s
,m
etc or more..
$s = array('s', 'm');
$result = preg_replace('~hi(?!'. join('|', $s) .')~', 'replace with this', 'him');
print $result; // him
// and
$result = preg_replace('~hi(?!'. join('|', $s) .')~', 'replace with this', 'hiz');
print $result; // replace with thisz
Upvotes: 0
Reputation: 255075
$str = 'his';
$s1 = 'hi';
$s2 = 's';
$result = preg_replace('~' . preg_quote($s1) . '(?!' . preg_quote($s2) . ')~', 'replace with this', $str);
// ~hi(?!s)~
// this regex means:
// "hi" string followed by anything but "s"
var_dump($result);
Live examples:
Upvotes: 2