2013-03-26 64 views
1

我得到了一個如下所示的方法,當我嘗試運行它時,出現異常。Java中的PatternSyntaxException(匹配Windows註冊表路徑)

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; 
     } 
    } 

回答

4

反斜槓字符用\\字符表示。要用正則表達式表示這個字符需要轉義每個字符,生成\\\\

String SUPPRTED_REGISTRY_PATH_REGEX[] = new String[] { 
    "^HKLM\\\\", 
    "^HKEY_LOCAL_MACHINE\\\\", 
    "^HKCR\\\\", 
    "^HKEY_CLASSES_ROOT\\\\" 
} 
+0

是的,它現在工作!謝謝 但我想我已經逃脫了我的反斜槓。第一個\是搜索模式,第二個\是轉義字符。什麼是兩個額外的反斜槓是什麼? – beyonddc 2013-03-26 15:25:48

+0

我已添加更新。看到文檔也:) – Reimeus 2013-03-26 15:35:54

4

通常代表\文字的正則表達式,你需要一次\\逃避它。

但是在Java中,您還需要在字符串中跳出\的特殊含義。因此,您將不得不使用"\\\\"來生成\\文字,該文字將用於正則表達式以匹配\文字。

簡單是不是:)

+0

噓.. Java感謝您的解釋。 – beyonddc 2013-03-26 15:31:14

+0

@beyonddc沒問題:) – Pshemo 2013-03-26 15:32:00

相關問題