Java模式的第一个字母不应该是连字符(-)、撇号(‘;)和空格()
我用这个模式来检查Java模式的第一个字母不应该是连字符(-)、撇号(‘;)和空格(),java,regex,Java,Regex,我用这个模式来检查 public static final Pattern VALID_FIRST_CHARACTERS = Pattern.compile("^[\\ \\'\\-]"); public boolean isValidFirstChar(String name) { if (VALID_FIRST_CHARACTERS.matcher(name).matches()) { return true; } return false; }
public static final Pattern VALID_FIRST_CHARACTERS = Pattern.compile("^[\\ \\'\\-]");
public boolean isValidFirstChar(String name) {
if (VALID_FIRST_CHARACTERS.matcher(name).matches()) {
return true;
}
return false;
}
运气不好,有人能帮帮我吗?你可以这样改变你的,它会起作用的:
public static void main(String[] args) throws FileNotFoundException {
System.out.println(isValidFirstChar("-test"));
System.out.println(isValidFirstChar("\\test"));
System.out.println(isValidFirstChar("\'test"));
System.out.println(isValidFirstChar("test"));
}
public static final Pattern VALID_FIRST_CHARACTERS = Pattern.compile("^[\\\\ \\' \\-].*");
public static boolean isValidFirstChar(String name) {
if (VALID_FIRST_CHARACTERS.matcher(name).matches()) {
return true;
}
return false;
}
其结果是:
true
true
true
false
您必须为java和regex转义\\\
,这就是为什么您需要\\\\\
这将在为regex翻译时变成\\
结尾的
*
表示匹配…之后的任何内容,因此它以\or'或-
开头,后跟任何内容。您认为模式文字^[\\\\\'\-]
代表什么?为什么你这么认为?为什么你不使用String#startsWith
?我使用的是公共静态最终模式VALID\u NAMEFIELD\u CHARACTERS=Pattern.compile(([a-zA-Zèèèèèèèèèèèèèèèèèèèèèèèèèèè;它工作正常,只是无法检查第一个character@SotiriosDelimanolis我需要一次完成所有3个验证如果我使用字符串start with,我必须使用3个时间为什么必须使用?你认为它更快、更高效吗?你为什么这么认为?谢谢你的回复,我只需要连字符(-)、撇号(')和空格()来匹配,所以我把它改为公共静态最终模式VALID_FIRST_CHARACTERS=Pattern.compile(^['-]);现在工作正常谢谢@brso05