php:preg_replace_callback 删除检测到的内容及其模式

php: preg_replace_callback remove detected content with its patterns

这是我的字符串。

$string = '{TE:Hi}';

这是我的 preg_replace_callback 代码:

echo preg_replace_callback('#(?<={TE:)(.*?)(?=})#is', function($matches){
        return '';
    }, $string);

我应该使用 preg_replace_callback 因为我在回调函数中使用了另一个函数。 此代码可以替换检测到的内容并将其删除。 但不能删除它的模式({TE: 和}) 这只会从字符串中删除 "Hi" 但我想删除“{TE:Hi}”。 "Hi" 是动态的,它可以是别的东西。并且字符串中可能有几种这种形式的模式。

提前致谢。

如果要删除完整的大括号表达式,则不应使用 (?<=(?= 环视。刚好匹配:

#{TE:(.*?)}#is

请注意,这将影响 $matches 数组中提供给回调函数的内容。

它将是 ["{TE:Hi}", "Hi"] 而不是 ["Hi", "Hi"]