You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中校验算术表达式合法性的正则写法正误求助

你写的正则存在多处语法错误,无法正确匹配非法字符,核心问题是字符组内的连字符-被错误用作范围运算符,同时存在多余的转义逻辑。

现存问题说明

  • 字符组内\\[-\\]、\\{-\\}、\\(-\\)的写法完全不符合需求:你本意是要匹配三类括号和减号,但实际这种写法会被正则解析为「匹配ASCII码在左括号和右括号之间的所有字符」,会包含大量你不需要的符号。
  • 末尾多余的-会进一步打乱字符组的匹配逻辑,导致匹配范围不可控。

正确实现方案

你要实现「匹配非法字符」的需求,正确的正则定义应该是:

Pattern p = Pattern.compile("[^0-9\\[\\]{}()+\\-*/\\s]");

逻辑说明

  • 否定字符组[^...]会匹配所有不在合法字符范围内的字符,只要调用p.matcher(表达式串).find()返回true,就说明存在非法字符,表达式不合法。
  • 减号-在这里做了转义处理\\-,避免被正则识别为范围运算符,你也可以选择把-放在字符组的最开头或者最末尾,不需要转义也能正常匹配字面量减号。

测试用例参考

测试用例1:合法表达式2 * (3 + 5) - [6 / {7 + 8}] → 无匹配结果,校验通过
测试用例2:含非法字符表达式10 ^ 2 → 匹配到^,校验不通过
测试用例3:含非法字符表达式a + 3 → 匹配到a,校验不通过

内容的提问来源于stack exchange,提问作者Bot Fred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:54:01