我有一个关于在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
是有效的预定义类。
我缺少什么。有人可以帮助我。
提前致谢。
答案 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