Php 过滤数字,除非它们位于大括号之间

Php 过滤数字,除非它们位于大括号之间,php,regex,Php,Regex,考虑以下字符串: $text = "Dat foo 13.45 and $600 bar {70} and {8}"; 我需要在$text中标记所有数字,除非它们位于大括号之间。我现在有这个: echo preg_replace("([0-9]+(?:\.[0-9]+)?)","{NUMBER:$0}",$tweet); 哪些产出: Dat foo {NUMBER:13.45} and ${NUMBER:600} bar {{NUMBER:70}} and {{NUMBER:8}} 然而,

考虑以下字符串:

$text = "Dat foo 13.45 and $600 bar {70} and {8}";
我需要在$text中标记所有数字,除非它们位于大括号之间。我现在有这个:

echo preg_replace("([0-9]+(?:\.[0-9]+)?)","{NUMBER:$0}",$tweet);
哪些产出:

Dat foo {NUMBER:13.45} and ${NUMBER:600} bar {{NUMBER:70}} and {{NUMBER:8}}
然而,期望的输出是:

Dat foo {NUMBER:13.45} and ${NUMBER:600} bar {70} and {8}
其中{和}之间的数字被忽略。是否可以将正则表达式扩展为ommit花括号,或者这里需要另一种解决方案

任何帮助都将不胜感激:-)

尝试使用查找不带
{}
的数字

注意:确保将正则表达式用分隔符括起来(例如
/


echo preg\u replace(“/(?{
”)和
(?!})
表示“后面不跟
}

你可以简单地通过接受答案来显示你的极大赞赏。也可以考虑调查语法。这是你连续第四次的PZSDENTEHEGEX问题;具体的语法已经向你解释过了。- SA和工具,或者教程。这很好-它几乎可以工作:但是,如果用Twitter =“Foo 40 bar”。{baz40}它没有。输出是“foo{NUMBER:40}bar{baz{NUMBER:4}0}”。换句话说:它只忽略大括号之间的数字,但不忽略数字旁边的大括号之间是否有其他字符。是否可以使正则表达式忽略大括号之间的*一切*,以便在本例中,输出为foo{NUMBER:40}bar{baz40}?@Reveller:我不确定。因为lookbehinds需要一个固定的长度。你可以使用
preg\u replace\u回调来代替lookarounds,然后在回调中检测它是否在花括号中。
echo preg_replace("/(?<!{)([0-9]+(?:\.[0-9]+)?)(?!})/","{NUMBER:$0}",$tweet);