仅用 preg_replace 替换 preg 字符串的最后一个匹配项?

replace only the last match of preg string with preg_replace?

仅图片

$content="}
}
hello world
          }
}"
$text='}\s*[\r\n]*\s*[\r\n]*\s*}';
$ss="~$text(?!.*$text)~";
$res=preg_replace($ss,'replacement',content);
echo $res;//$res:"replacement hello world replacement"

我只想使用 preg_replace()

替换最后一个 '} }'
    $content="}}hello world}}";
    $text='}\s*[\r\n]*\s*[\r\n]*\s*}';
    $ss="~$text(?!.*$text)~";
    $res=preg_replace($ss,'replacement',$content);
    print_r($res);exit;

输出:

   }}hello worldreplacement

您可以使用

将最后出现的 } 替换为它们之间的空白字符:

}\s*}(?![^}]*})$
  • }\s*} 匹配 }, 0+ 个空白字符,然后 }
  • (?![^}]*}) 否定前瞻,断言右边的内容不再出现 ]
  • $ 断言字符串结束

请注意,这不考虑余额括号,只考虑最后一个 }

Regex demo