我试图从一个不是定义的数学运算符或保留字的字符串中删除所有内容。
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
以下内容将符合您的标准:
[-+*/0-9()]+|ABC|XYZ
演示
只需获取所有匹配项并将它们连接在一起即可获得所需的输出。
如果您坚持使用preg_replace
,请将其替换为空字符串:
(?:ABC|XYZ)(*SKIP)(*FAIL)|[^-+*/0-9()]
演示
但这比上面推荐的方法更复杂,而且更慢。