我对字符串和注释有以下规则:
Double_quoted_string : '"' ( ~[\n\r] )* '"' ;
SL_Comment : '//' .*? '\r'? '\n' -> channel(HIDDEN) ;
但我看到以下输入:
printf("Hello \"something "); //printf("Bye ");
生成的字符串标记是:
"Hello \"something "); //printf("Bye "
即。贪婪地进行最长的匹配,而不应用评论规则。
我希望字符串只是“Hello \”的东西“。应该如何修改规则?
答案 0 :(得分:1)
喜欢这个
Double_quoted_string
: '"' ( ~[\\"\n\r] | '\\' [\\"] )* '"'
;
内部( ... )*
的简短说明:
~[\\"\n\r]
匹配除\
,"
,\n
和\r
'\\' [\\"]
匹配\\
或\"
* *如果您想要逃避更多,只需将它们添加到角色类:'\\' [\\"'tbnrf]
将匹配\\
,\"
,\'
,\t
, \b
,\n
,\r
和\f