下面是我的代码,它允许特殊字符,数字,字符(上部和下部)。这个程序工作正常。我的方括号问题。
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));
}
}
真
在程序中,我使用[]括号括起所有字符,数字,特殊字符。我没有使用额外的方括号作为特殊章程,但程序允许它。任何人都可以告诉我为什么它允许方括号。如果我错了,请更正我。
答案 0 :(得分:4)
你应该逃脱连字符。
String reg = "[A-Za-z0-9!$\\-~`?/@#%^*&()_+=<>.,';:|\" ]*";
^
或将其放在最后
String reg = "[A-Za-z0-9!$~`?/@#%^*&()_+=<>.,';:|\" -]*";
这是你的正则表达式匹配的(而不是连字符,你定义了从$
到~
的范围):
答案 1 :(得分:1)
由于您使用连字符,您可以将其转义或将其作为范围中的第一个或最后一个字符:
[-a-z]
或[a-z-
]
否则,[A-Za-z ... $-~ ... \" ]
会尝试匹配所有给定字符以及$
和~
之间的所有内容,您可以在stribizhev's good answer中直观地看到。
另见How to match hyphens with Regular Expression?:
[-]
匹配连字符。[abc-]
匹配a
,b
,c
或连字符。[-abc]
匹配a
,b
,c
或连字符。[ab-d]
匹配a
,b
,c
或d
(仅此处连字符表示字符范围)。