2014-09-28 146 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