Antlr4匹配西里尔文,拉丁文,波兰文和希腊文字母以及特殊字符?

时间:2016-11-07 09:04:13

标签: regex antlr antlr4

在Antlr4语法中,我需要在正则表达式拉丁语,西里尔语,波兰语和希腊语字母以及特殊字符的帮助下进行匹配。这就是我所拥有的:

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

所以我说String''开头和结尾。在里面我可以有任何字母(\p{L}),数字和特殊字符,但'除外。我已经在regex101.com上对此进行了测试,这正是我想要的。但是在Antlr4中它不起作用。相反,我得到的最接近的是:

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

但问题是'Ąłćórżnęł'这样的东西在我的语言中不会被接受,但应该是。

我在Antlr4中做错了什么或是限制?我怎样才能让它在Antlr4中运行?字符串是Lexer规则。

1 个答案:

答案 0 :(得分:3)

ANTLR不支持

\p{L}。您必须手动编写这些范围:[\u1234-\u5678](使用十六进制Unicode点更改\u....),其中\u1234是范围的开头,\u5678结束。请注意,您可以在字符集中放置多个范围:[\u1234-\u1238\u3456-\u5679]

  

谢谢,但是如何在Antlr4中使用正则表达式,我允许除了像'之类的字符之外的所有字符串。但我说一个字符串以“

”开头并以“

结尾

看起来像这样:

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

并使用转义引号并且不允许换行符,请执行以下操作:

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