如何从正则表达式中删除此字符?

时间:2016-03-25 15:39:18

标签: java regex

我慷慨地使用了this question中接受的答案 - 正如这样实施时,正则表达式似乎正确地检查了非法字符:

public static boolean checkInvalidCharacter (String alphaNum) 
  {
    if (alphaNum == null) return false;

    try {
        boolean isRegex = false;
        RE r = new RE("^.*?(?=[\\^#%&$\\*:<>\\?/\\{\\|\\}]).*$");
        isRegex = r.match(alphaNum);
        System.out.println("isRegex: "+isRegex);
        System.out.println("Space");
      return r.match(alphaNum);   
    } catch (RESyntaxException e) {
      return false;
    }
  }

但是,我们需要接受这些字符的子集(:?/ *&amp; $),当我尝试删除&#34;:&#34;为了查看它是否可行,我收到错误&#34;语法错误:缺少操作数以关闭&#34;。

我假设[]括号中包含的字符集是要检查的字符集 - 这是一个错误的假设吗?更重要的是,如何从此RegEx中删除有效的字符列表,以便将其与我的字符串进行比较?

2 个答案:

答案 0 :(得分:2)

整个方法过于复杂。

你试过了吗?

public static boolean checkInvalidCharacter (String alphaNum) {
    return alphaNum != null && alphaNum.matches(".*[\\^#%<>\\{\\|\\}].*");
}

或更好:

public static final String INVALID_CHARACTERS = "^#%<>{}|";
private static final Pattern INVALID_PATTERN = Pattern.compile("["+Pattern.escape(INVALID_CHARACTERS)+"]");

public static boolean containsInvalidCharacters(String input) {
    return input != null && INVALID_PATTERN.matcher(input).find();
}

答案 1 :(得分:1)

我认为错误的原因可能是由于:之后的正则表达式不正确;或者更确切地说,从:开始的字符串是不正确的。实际上,由于:未转义,因此根本不会检查无效的:字符;未转义的"^.*?(?=[\\^#%<>\\{\\|\\}]).*$"在正则表达式中具有特殊意义。我不是正则表达式的专家,但是根据here的表格,未转义的冒号&#34;组合正则表达式而不记住匹配的文本。&#34;我不确定这意味着什么。

我尝试使用此字符串{{1}}并对其进行了测试here。这应该做你正在寻找的。