Java 允许方括号的正则表达式

Java 允许方括号的正则表达式,java,regex,Java,Regex,下面是我的代码,它允许特殊字符,数字,字符(上限和下限)。这个程序运行良好。我的问题用方括号括起来 public class MatchingSpecificCharacters { public static void main(String[] args) { String reg = "[A-Za-z0-9!$-~`?/@#%^*&()_+=<>.,';:|\" ]*"; String line = "as[]d";

下面是我的代码,它允许特殊字符,数字,字符(上限和下限)。这个程序运行良好。我的问题用方括号括起来

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));


    }
}
公共类匹配特定字符{
公共静态void main(字符串[]args){
String reg=“[A-Za-z0-9!$-~`?/@%^*&()\+=,”;:\“]*”;
String line=“as[]d”;
System.out.println(line.matches(reg));
}
}
输出 真的


在程序中,我使用了[]方括号来括起所有字符、数字和特殊字符。我没有使用额外的方括号来允许作为特殊特许,但程序允许这样做。有人能告诉我为什么允许方括号吗?如果我错了,请纠正我。

您应该将连字符转义

String reg = "[A-Za-z0-9!$\\-~`?/@#%^*&()_+=<>.,';:|\" ]*";
                           ^
String reg=“[A-Za-z0-9!$\\-~`?/@%^*&()\+=,”;:\\“]*”;
^
或者把它放在最后

String reg = "[A-Za-z0-9!$~`?/@#%^*&()_+=<>.,';:|\" -]*";
String reg=“[A-Za-z0-9!$~`?/@%^*&()+=,”;:“\”-]*;
这是正则表达式所匹配的(您定义的范围是从
$
~
),而不是连字符):


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

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

否则,
[A-Za-z…$-~…\”]
将尝试匹配所有给定字符以及在
$
~
之间的所有内容,您可以在中看到这些内容

另见:

  • [-]
    匹配连字符
  • [abc-]
    匹配
    a
    b
    c
    或连字符
  • [-abc]
    匹配
    a
    b
    c
    或连字符
  • [ab-d]
    匹配
    a
    b
    c
    d
    (此处仅连字符表示字符范围)

永远不要转义连字符,因为它不是特殊字符。在某个范围内使用时,请将其放在开头或结尾,以避免与范围格式匹配。您提供的键盘不是普通键盘。可以提供键盘的完整图片。(我不知道它是否是键盘)。请详细说明,它对其他人也有帮助。它不是键盘,而是一个键盘,它是键盘的一部分。Regex正在使用Unicode代码点表解析中的字符范围。