PHP preg_replace。只有在不以“ - ”开头或以“ - ”结尾的情况下,才将AB替换为CD

时间:2014-02-27 00:23:32

标签: php regex preg-replace

我对preg_match()有疑问。我有一个带有特殊字符的字符串,告诉我字符串的一部分需要被替换,而不是。但我找不到能够做到这一点的模式。我希望你能帮助我。

一个例子:

“AB-”或“-AB”或“AB”=>替换为CD

“ - AB-”=>不要用CD替换

$str = 'AB-AB-ABAB-AB--AB-AB'; //Actual string
$ptr = '  ????  ';
$rem = 'CD';

echo preg_replace($ptr, $rem, $str); // It should be "CD-AB-CDCD-AB--AB-CD"

我一直在尝试使用/(?!\-)AB(?!\-)/和类似的东西,但只得到部分结果......

请求帮助。

1 个答案:

答案 0 :(得分:4)

您可以使用前瞻和后瞻断言:

$repl = preg_replace('/((?<!-)AB|AB(?!-))/', 'CD', 'AB-AB-ABAB-AB--AB-AB');
//=> CD-AB-CDCD-AB--AB-CD