正则表达式,允许使用方括号

时间:2015-08-10 13:45:34

标签: java regex

下面是我的代码,它允许特殊字符,数字,字符(上部和下部)。这个程序工作正常。我的方括号问题。

public class MatchingSpecificCharacters {
    public static void main(String[] args) {

        String reg = "[A-Za-z0-9!$-~`?/@#%^*&()_+=<>.,';:|\" ]*";
        String line = "as[]d";

        System.out.println(line.matches(reg));


    }
}

输出

在程序中,我使用[]括号括起所有字符,数字,特殊字符。我没有使用额外的方括号作为特殊章程,但程序允许它。任何人都可以告诉我为什么它允许方括号。如果我错了,请更正我。

2 个答案:

答案 0 :(得分:4)

你应该逃脱连字符。

String reg = "[A-Za-z0-9!$\\-~`?/@#%^*&()_+=<>.,';:|\" ]*";
                           ^

或将其放在最后

String reg = "[A-Za-z0-9!$~`?/@#%^*&()_+=<>.,';:|\" -]*";

这是你的正则表达式匹配的(而不是连字符,你定义了从$~的范围):

enter image description here

答案 1 :(得分:1)

由于您使用连字符,您可以将其转义或将其作为范围中的第一个或最后一个字符:

[-a-z][a-z-]

否则,[A-Za-z ... $-~ ... \" ]会尝试匹配所有给定字符以及$~之间的所有内容,您可以在stribizhev's good answer中直观地看到。

另见How to match hyphens with Regular Expression?

  
      
  • [-]匹配连字符。
  •   
  • [abc-]匹配abc或连字符。
  •   
  • [-abc]匹配abc或连字符。
  •   
  • [ab-d]匹配abcd仅此处连字符表示字符范围)。
  •