在Antlr4语法中,我需要在正则表达式拉丁语,西里尔语,波兰语和希腊语字母以及特殊字符的帮助下进行匹配。这就是我所拥有的:
STRING: ['][\p{L} 0-9\[\]\^\$\.\|\?\*\+\(\)\\~`\!@#%&\-_+={}""<>:;,\/°]*['];
所以我说String
以''
开头和结尾。在里面我可以有任何字母(\p{L}
),数字和特殊字符,但'
除外。我已经在regex101.com上对此进行了测试,这正是我想要的。但是在Antlr4中它不起作用。相反,我得到的最接近的是:
['][a-zA-Z0-9 \[\]\^\$\.\|\?\*\+\(\)\\~`\!@#%&\-_+={}""<>:;,\/°]*[']
但问题是'Ąłćórżnęł'
这样的东西在我的语言中不会被接受,但应该是。
我在Antlr4中做错了什么或是限制?我怎样才能让它在Antlr4中运行?字符串是Lexer规则。
答案 0 :(得分:3)
\p{L}
。您必须手动编写这些范围:[\u1234-\u5678]
(使用十六进制Unicode点更改\u....
),其中\u1234
是范围的开头,\u5678
结束。请注意,您可以在字符集中放置多个范围:[\u1234-\u1238\u3456-\u5679]
。
谢谢,但是如何在Antlr4中使用正则表达式,我允许除了像'之类的字符之外的所有字符串。但我说一个字符串以“
”开头并以“结尾
看起来像这样:
STRING : '\'' ~[']* '\'';
并使用转义引号并且不允许换行符,请执行以下操作:
STRING : '\'' ( ~['\r\n] | '\\' ['\\] )* '\'';