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

如何用Java的Pattern.compile匹配JSON文件中的非标准字符?

解决JSON非标准字符匹配问题

嘿,我来帮你搞定这个正则的问题!你的需求是找出包含指定允许字符之外的行对吧?先看看你当前的正则写法哪里出问题了:

你的原正则[^a-zA-Z_0-9 && [[]] && [{}]存在几个明显问题:

  • Java正则的字符类里不能用多个&&来拼接集合,这种写法不符合语法规范
  • 你需要允许的字符里,还有:、"、,、(、-、.、\、/这些都没加入允许列表
  • 部分特殊字符(比如[、])没有正确转义,会导致正则解析错误

正确的正则表达式

我们需要用否定字符类[^...]来定义所有允许的字符,同时对正则里的特殊字符做转义处理。正确的正则应该是:

"[^a-zA-Z0-9_\\[\\]{:\"(),-.\\\\/]"

正则细节解释:

  • [^...]:表示匹配不在这个字符集合里的任意单个字符
  • a-zA-Z0-9_:覆盖所有字母、数字和下划线
  • \\[\\]:转义后的[和],因为它们在字符类里是特殊符号,必须转义才能被当作普通字符处理
  • {:\"(),-.\\\\/:包含你指定的其他允许字符,其中\\\\是Java字符串里表示单个\的写法(因为Java字符串和正则表达式都需要双重转义)

修改后的完整代码

另外,建议把Pattern的编译移到循环外面,避免每次循环重复编译正则(这会额外消耗性能):

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// ... 你的其他业务代码 ...

// 提前编译正则,复用实例
Pattern regex = Pattern.compile("[^a-zA-Z0-9_\\[\\]{:\"(),-.\\\\/]");
for (String line : lines) {
    Matcher m = regex.matcher(line);
    // 检查行中是否存在任意一个非允许字符
    if (m.find()) {
        System.out.println(line);
    }
}

额外注意点

如果你认为JSON里的空白字符(比如空格、制表符)也属于需要排查的“非标准字符”,当前正则不会匹配它们——如果需要把空白字符也纳入排查范围,不用修改正则,因为空白字符不在允许列表里,当前代码会自动匹配;如果空白字符是允许的,那当前正则已经默认排除了对它们的匹配,不需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:00