我有一个看起来如下的方法,当我尝试运行它时,我得到了一个例外。
java.util.regex.PatternSyntaxException:索引6附近出现意外的内部错误 ^ HKLM \
任何人都能发现我的正则表达式出了什么问题?我要做的是检查一个Windows注册表路径的字符串,并确保我的软件支持它。
final String SUPPRTED_REGISTRY_PATH_REGEX[] = new String[] {
"^HKLM\\",
"^HKEY_LOCAL_MACHINE\\",
"^HKCR\\",
"^HKEY_CLASSES_ROOT\\"
};
boolean isValidated = false;
// Windows registry path is case-insensitive therefore
// convert the registry path to all upper case for
// ease of comparison
String uppercaseRegistryPath = registryPath.toUpperCase();
for(int i = 0;
i < SUPPRTED_REGISTRY_PATH_REGEX.length && isValidated == false;
i++) {
if(Pattern.matches(
SUPPRTED_REGISTRY_PATH_REGEX[i], uppercaseRegistryPath)) {
isValidated = true;
}
}
答案 0 :(得分:4)
反斜杠字符由\\
字符表示。要在正则表达式中表示这一点,需要对每个字符进行转义,从而生成\\\\
。
String SUPPRTED_REGISTRY_PATH_REGEX[] = new String[] {
"^HKLM\\\\",
"^HKEY_LOCAL_MACHINE\\\\",
"^HKCR\\\\",
"^HKEY_CLASSES_ROOT\\\\"
}
答案 1 :(得分:4)
通常要在正则表达式中表示\
字面值,您需要在\\
时将其转义一次。
但是在Java中你还需要在String中逃避\
的特殊含义。因此,您必须使用"\\\\"
生成\\
字面值,该字面值将在正则表达式中用于匹配\
字面值。
简单不是它:)