2013-07-12 28 views
3

我在java中編寫正則表達式,但運行程序時出現錯誤。java.util.regex.PatternSyntaxException:索引附近的未封閉字符類

private final static Pattern QUOTE_VALUE = Pattern.compile("[_]?([a-zA-Z0-9_]+)=(\"[^]*\"),"); 
// Then later on down the road...... 
Macher m = QUOTE_VALUE.matcher(myString); 
while (m.find()){ 
    System.out.println("Found " + m.group(1) + " " + m.group(2)); 
} 

我想使我的正則表達式匹配這些示例值。

_MyKey="ID IN [ "ABC" ]", // Note - it has a comma after the ] 
_MyKey="ID IN [ ""XYZ"" ]", // Note - it has a comma after the ] 

我嘗試過使用在線正則表達式助手 - 而我的正則表達式實際上工作正常。但是,當我在運行程序時,我得到這個錯誤:

Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 28 
[_]?([a-zA-Z0-9_]+)=("[^]*"), 

的另一個問題是,我如何格式化的正則表達式,所以我也可以用這個字符串匹配呢?

MyKey="ID IN [ "ABC" ]", // without the _ 
_MyKey="ID IN [ "ABC" ]", // with the _ 

謝謝。

[編輯]

你能幫我做這部分的質詢?

另一個問題是,我如何格式化正則表達式,所以我也可以匹配它與此字符串?

的myKey = 「ID IN [ 」ABC「]」,//無_ _MyKey = 「ID IN [ 」ABC「]」,//與_

+3

我的猜測是你有一個未關閉的字符類 – keyser

+0

請看[本頁解釋字符類]中標題爲「元字符內部的元字符」一節(http://www.regular-expressions.info/charclass。 html),他們在那裏解決'[^] x]'作爲一個例子,可以很好地解釋你的錯誤。 – femtoRgon

回答

4

這部分:

[^] 

需要或者是

[\\^]* 

,如果你正在尋找的零個或帽子字符的序列。 (注意第一個反斜槓在那裏告訴Java字符串解析器第二個反斜槓需要留在字符串中最終結果是正則表達式解析器只看到一個反斜槓並用它來表示帽子字符需要用方括號標識字符類的一部分)

或者你缺少你不想在事情:

[^b]* 

匹配零個或多個非b字

考慮你想匹配什麼,請嘗試[^"]*或者.*

如果需要跨行尾匹配,使用.*並把?s在正則表達式來迫使Java的正則表達式匹配到這種模式,允許點以匹配所有字符,包括換行的前面。

感謝@TimPietzcker提供的javascript註釋。這表明該在線工具不是Java正則表達式檢查器,但可能是javascript正則表達式檢查器。

+0

'[^]'是JavaScript中任何字符(包括newlines)的常用簡寫形式(因爲在那裏沒有'Pattern.DOTALL'選項)。所以它可能是一個簡單的'.',以及他需要的'Pattern.DOTALL'選項。 –

+0

你能幫我解答這部分問題嗎? – Ted

+0

我想你只需要'_?'來允許0或1的下劃線。我認爲你不需要使用大括號,但是我想這應該起作用。我在http://www.regexplanet.com/advanced/java/index.html這裏試過,它適用於兩者。 –

相關問題