正则表达式允许数学运算符+保留变量

时间:2014-11-10 12:06:17

标签: php regex

我试图从一个不是定义的数学运算符或保留字的字符串中删除所有内容。

function run($value)
{
    return preg_replace('/[^0-9\+\-\*\/\(\)\.]/', '', $value);
}


echo run('23*10 /SDF (ABC * 2) + 3 / XYZ');

在上面的示例中,ABC和XYZ是接受的保留字(我无法在正则表达式中使这些工作)并且需要被允许。取得预期的结果:

23*10/(ABC*2)+3/XYZ

为清楚起见,允许的字符是:

any integer "0-9"
plus "+"
minus "-"
divide "/"
multiply "*" 
open/close parenthesis "(" ")"

允许的保留字是:

ABC
XYZ

1 个答案:

答案 0 :(得分:1)

以下内容符合您的条件:

[-+*/0-9()]+|ABC|XYZ

Demo

只需获取所有匹配项并将它们连接在一起即可获得所需的输出。


如果您坚持使用preg_replace,请将其替换为空字符串:

(?:ABC|XYZ)(*SKIP)(*FAIL)|[^-+*/0-9()]

Demo

但这比上面推荐的方法更复杂,更慢