2017-08-17 146 views
1

我會在字符串上匹配符號「<」,「>」,「{」,「}」。我用Java字符串匹配括號

String text="<"; 
    System.out.println(text.matches("(\\W)*([{]|[}]|[<]|[>])")); 

    //output: false. 

,一切都很好,只是需要以匹配後的空間「<」。任何建議? 謝謝

+1

你爲什麼不把所有這些角色聚合到同一個角色類中? '''text.matches(「(\\ W)*([{} <>])」))'' – f1sh

+0

您可以像'\ {'而不是'[{]'這樣做來匹配一個字符;像'text.matches(「(\\ W)*(\ {| \} | \ <|\>)」)';但這不會回答你的問題。 ''你是什麼意思'需要'後面的空格?它只匹配'>'而不是'>'? – NatNgs

+0

它只匹配「<」(注意空格)而不匹配「<」。 – Discipulos

回答

1

我相信這個正則表達式應該可以解決你的問題。我清理了一下代碼,並添加了一個積極的前瞻<,確保在<之後有空格。如果你還沒有使用lookahead,我建議閱讀關於它們的http://www.regular-expressions.info/lookaround.html

正則表達式:"(\\W)*([{>}]|\\<(?=))"

+0

它給出無效的常規異常。 – Discipulos

+0

我在PCRE正則表達式中檢查過它。我不知道爲什麼它會在Java正則表達式中失敗。我會研究它。 –

+0

由於Java的差異,我的正則表達式被重新構造。他們對特殊字符的解釋不同我現在已經測試了一個java字符串。 –

0

的問題是發佈的代碼之外。謝謝大家。