0
我需要構建表示Java正則表達式的樹。 java.util.regex.Pattern
做的工作,但其root
字段和Node
內部類(及其子類)不可見,所以我無法訪問它們。我必須編寫我自己的解析器並重新實現所有解析邏輯?從正則表達式構建樹
我需要構建表示Java正則表達式的樹。 java.util.regex.Pattern
做的工作,但其root
字段和Node
內部類(及其子類)不可見,所以我無法訪問它們。我必須編寫我自己的解析器並重新實現所有解析邏輯?從正則表達式構建樹
您可以使用reflection讓那些私有字段,或使用現有的正則表達式/ PCRE解析器:http://bkiers.github.com/PCREParser。請注意,PCREParser lib(我是其作者)不會進行真正的(單元)測試:因此,如果您計劃在生產代碼中使用它,請對其進行適當的單元測試! :)
感謝您的回答,但我需要嚴格遵守Java正則表達式方言。例如,基於ANTLR的lib與正則表達式'「[a |]」'不匹配,將'''''解釋爲OR運算符。可能反思是唯一可行的解決方案。 – manfcas
@曼努埃爾,它匹配罰款(不匹配它意味着不匹配例外,或類似)。誠然,我不會更改字符類內的元字符的標記類型,如'|,'*','+'等。這會導致很多嵌入代碼。然後再遍歷這棵樹並改變一個'CHAR_CLASS'樹的所有子令牌的類型是很簡單的:輸入'「[a |]」'* *被正確地解析到樹中:'^(CHAR_CLASS'a'' |')'。無論如何,反思可能仍然是更好的選擇,當然! :) –