关于正则表达式空白

时间:2014-12-09 05:29:54

标签: java regex

我有一个关于在java正则表达式中表示空间的小查询。

我想限制名称,因为我已将模式定义为

Pattern DISPLAY_NAME_PATTERN = compile("^[a-zA-Z0-9_\\.!~*()=+$,-\s]{3,20}$");

但是eclipse将其表示为错误"无效的转义序列"。它说的是" \ s"根据

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

是有效的预定义类。

我缺少什么。有人可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要再次逃离\中的\s。而且,您不需要逃避角色类中的.。字符类中的.\\.与文字点匹配。

Pattern DISPLAY_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_.!~*()=+$,\\s-]{3,20}$");

并将-放在角色类的第一个或最后一个位置。因为字符类中心的-可以充当范围运算符。 regex.PatternSyntaxException: Illegal character range例外主要是因为此问题,,\\s

之间不存在范围

如果你想做一个反斜杠匹配,那么你需要将其转义三次。

Pattern DISPLAY_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_.\\\\!~*()=+$,\\s-]{3,20}$");

示例:

System.out.println("foo-bar bar8998~*foo".matches("[a-zA-Z0-9_.\\\\!~*()=+$,\\s-]{3,20}"));   // true
System.out.println("fo".matches("[a-zA-Z0-9_.\\\\!~*()=+$,\\s-]{3,20}"));  // false