在java正则表达式中,我如何获得一个字符类,例如来匹配 – 减号?

Pattern pattern = Pattern.compile("^[az]+$"); String string = "abc-def"; assertTrue( pattern.matcher(string).matches() ); // obviously fails 

字符类是否可以匹配“ – ”?

不要在字符之间加上减号。

 "[az-]" 

逃避减号[az \ – ]

在字符类[...]内部- 如果它被两边的字符包围,则被特别处理(作为范围操作符)。 这意味着如果你包括-在字符类的开头或结尾,它将被字面上处理(非特殊)。

所以你可以使用正则表达式:

 ^[az-]+$ 

要么

 ^[-az]+$ 

由于-我们添加的是字面上的处理,所以没有必要逃避它。 虽然如果你这样做并不是一个错误。

另一种(不太推荐)的方法是在字符类中不包括-

 ^(?:[az]|-)+$ 

请注意,在这种情况下,括号不是可选的| 具有非常低的优先级,因此使用括号:

 ^[az]|-+$ 

将匹配字符串开头的小写字母和一个或多个-最后。

我会更具体地说“不要把它放在人物之间”。

使短划线成为角色类中的第一个或最后一个角色。 例如,“[ – a-z1-9]”匹配小写字母,数字或短划线。

这对我有用

  Pattern p = Pattern.compile("^[az\\-]+$"); String line = "abc-def"; Matcher matcher = p.matcher(line); System.out.println(matcher.matches()); // true