2016-11-07 151 views
2

在Antlr4語法中,我需要匹配正則表達式拉丁語,西里爾語,波蘭語和希臘字母以及特殊字符的幫助。這是我有:Antlr4匹配西裏爾字母,拉丁字母,波蘭字母和希臘字母以及特殊字符?

STRING: ['][\p{L} 0-9\[\]\^\$\.\|\?\*\+\(\)\\~`\[email protected]#%&\-_+={}""<>:;,\/°]*[']; 

所以我說,一個String的起始和結束''。裏面我可以有任何字母(\p{L}),數字和特殊字符,從'除外。我已經在regex101.com上測試過了,它正是我想要的。但在Antlr4中它不起作用。相反,我得到的最接近的事是:

['][a-zA-Z0-9 \[\]\^\$\.\|\?\*\+\(\)\\~`\[email protected]#%&\-_+={}""<>:;,\/°]*['] 

但問題是,像'Ąłćórżnęł'不會在我的語言被接受,但它應該是。

我在Antlr4做錯了什麼或者是一個限制?我如何設法讓它在Antlr4中工作?字符串是Lexer規則。

回答

3

\p{L}不被ANTLR支持。您將不得不像這樣手動編寫這些範圍:[\u1234-\u5678](使用您的十六進制Unicode點更改\u....),其中\u1234是範圍的開始,\u5678結束。請注意,您可以在字符集中放入多於1個範圍:[\u1234-\u1238\u3456-\u5679]

謝謝,但如何在Antlr4中的正則表達式,其中我允許一個字符串內的所有內容,除了像一個字符。但是我要說的是一個字符串開始與「

結束這將是這樣的:

STRING : '\'' ~[']* '\''; 

,並逃脫了報價,不允許換行,這樣做:

STRING : '\'' (~['\r\n] | '\\' ['\\])* '\''; 
+0

謝謝,但如何在Antlr4中的正則表達式中,我允許字符串中的所有內容除了像''這樣的字符。但我說一個字符串以'?開始並以'結束? – Devid

+0

@Devid檢查我編輯的答案 –

+0

謝謝。在Antlr4中,我是這樣做的:STRING:['](〜['] |'\'\'')* [']; – Devid