首页 > 解决方案 > 检查非标准字符的字符串

问题描述

我正在尝试在 json 文件中查找所有非标准字符。但是,我不太了解Pattern.compile(...)方法的正则表达式语法,无法指定我想要的内容。基本上,我希望它返回任何不是字母、数字、“[”、“{”、“:”、“\””、“”、“_”、“(”、“-”、 “.”、“\”、“/”

我只是想打印出带有特殊字符的行。

代码如下所示:

for (String line : lines) {

        Pattern regex = Pattern.compile("[^a-zA-Z_0-9 && [[]] && [{}]");
        Matcher m = regex.matcher(line);

        boolean check = m.find();

        if (check) {
            System.out.println(line);
        }
    }

标签: javajsonregexdesign-patternsmatcher

解决方案


这是您可以尝试的正则表达式:

[^\p{L}\p{N}\[\]{}:",_().\\/-]

一些注意事项:

  • \p{L}匹配所有语言的所有 unicode 字母。A-Za-z如果您只关心英文字母,请替换为。
  • 同样,\p{N}匹配所有 unicode 数字符号。0-9如果您只关心拉丁字母中的数字,请替换为。
  • [, ], 并且\需要被前面的 转义\,否则它们在正则表达式本身中具有特殊含义。
  • 也是如此-,但是通过将它放在最后,它不需要被转义。

然后为了将其表示为 Java 字符串常量,您需要担心在 Java 字符串语法中具有特殊含义的字符:"\. 因此,所有出现的"\在正则表达式中都必须在 Java 代码中转义:

"[^\\p{L}\\p{N}\\[\\]{}:\",_().\\\\/-]"

推荐阅读