2014-09-28 78 views
0

我有一個小問題(我之前用過Google): 有沒有辦法,如何匹配除引號以外的所有特殊Unicode字符?識別特殊字符

我有這樣的代碼:

STRING:  '"' (NUMBER|LETTER|' '|'!'|'?'|':'|'.'|'/'|'*')* '"'; 

fragment LETTER: ('a'..'z'|'A'..'Z'); 
fragment DIGIT: ('0'..'9'); 

有沒有更有效的方法?

感謝您的反饋!

+2

是什麼讓一個字符「特殊」? – hobbs 2014-09-28 06:02:59

回答

0

~["]或舊的v3風格~'"'匹配除引號之外的任何字符。

如果你也想排除換行,做這樣的事情:

STRING : '"' ~["\r\n]* '"'; 

the official docs

~x

匹配任何單個字符不是由x描述的集。設置x可以是單個字符文字,範圍或~(’x’|’y’|’z’)~[xyz]的子集。下面是一個使用~使用~[\r\n]*匹配字符以外的任何字符的規則:

COMMENT : '#' ~[\r\n]* '\r'? '\n' -> skip ; 
+0

當我輸入'print'Hello world!''時,表示'1'行1:6標記識別錯誤'''''' 行1:18標記識別錯誤:'!' 行1:19標記識別錯誤:''\ n'' – DrunkCoder 2014-09-28 08:22:47

+0

@DrunkCoder,你沒有使用ANTLR3,對不對?如果你使用v4,我想其他一些規則會導致失敗:你能在這種情況下發布你的整個語法嗎?另請參閱官方文檔的鏈接。 – 2014-09-29 20:19:03