过滤数字,除非它们在花括号之间

时间:2012-02-10 21:25:54

标签: 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}}

但是,所需的输出是:

Dat foo {NUMBER:13.45} and ${NUMBER:600} bar {70} and {8}

其中{和}之间的数字被忽略。是否有可能扩展正则表达式以省略花括号或这是否需要另一种解决方案?

非常感谢任何帮助: - )

1 个答案:

答案 0 :(得分:3)

尝试使用lookaheads/lookbehinds查找没有{}的数字。

注意:请确保将您的正则表达式括在分隔符中(例如/)。

echo preg_replace("/(?<!{)([0-9]+(?:\.[0-9]+)?)(?!})/","{NUMBER:$0}",$tweet);

DEMO:http://codepad.org/7ai0px2i

(?<!{)表示“前面没有{”,(?!})表示“后面没有}”。