替换仅在括号内但不在里面的文本。
我试过这个
$pro_name = samsung galaxy s3 (s3);
$new_pro_name = preg_replace("/\b(s3)\b/i",***s5****,$pro_name);
echo $new_pro_name;
预期结果:
samsung galaxy ***s5**** (s3)
输出:
samsung galaxy ***s5*** (***s5***)
答案 0 :(得分:1)
(
和)
在正则表达式中有意义,请尝试使用\(
和\)
转义它们。
答案 1 :(得分:1)
试试这个:
$pro_name = "samsung galaxy s3 (s3)";
$new_pro_name = preg_replace("/(.*)s3(.*)\((.*)\)/i","$1s5$2($3)",$pro_name);
echo $new_pro_name;
输出:samsung galaxy s5 (s3)
答案 2 :(得分:1)
试试这个:s3+(?=[^()]*(\(|$))
使用预先确认括号。
示例:
$pro_name = samsung galaxy s3 (s3);
$new_pro_name = preg_replace("/s3+(?=[^()]*(\(|$))/g", 's5', $pro_name);
echo $new_pro_name;
答案 3 :(得分:1)
使用否定回顾和预测http://www.regular-expressions.info/lookaround.html
我们可以使用以下内容:
$pro_name = 'samsung galaxy s3 (s3)';
$new_pro_name = preg_replace("/(?<!\()s3(?!\))/i", '***s5****', $pro_name);
echo $new_pro_name;
请注意(?<!x)
会回顾前一个不能为'x'的字符。
在你的情况下,这需要(
,但因为这是一个特殊字符,需要将其转义为\(
和(?!x)
展望不是x的角色。
有关REGEX中使用的特殊字符的细分,请参阅php的preg_quote();
http://php.net/manual/en/function.preg-quote.php