Antlr4 匹配西里尔字母、拉丁字母、波兰字母和希腊字母以及特殊字符?
Antlr4 match Cyrillic, Latin, Polish and Greek Letters plus special characters?
在 Antlr4 语法中,我需要借助正则表达式来匹配拉丁文、西里尔文、波兰文和希腊字母以及特殊字符。这是我的:
STRING: ['][\p{L} 0-9\[\]\^$\.\|\?\*\+\(\)\~`\!@#%&\-_+={}""<>:;,\/°]*['];
所以我说 String
以 ''
开始和结束。在里面我可以有任何字母 (\p{L}
)、数字和特殊字符,除了 '
。我已经在 regex101.com 上测试过了,这正是我想要的。但在 Antlr4 中它不起作用。相反,我得到的最接近的是:
['][a-zA-Z0-9 \[\]\^$\.\|\?\*\+\(\)\~`\!@#%&\-_+={}""<>:;,\/°]*[']
但问题是像 'Ąłćórżnęł'
这样的东西在我的语言中不会被接受,但它应该被接受。
我在 Antlr4 中做错了什么或者这是一个限制?我怎样才能让它在 Antlr4 中工作?字符串是词法分析器规则。
\p{L}
不受 ANTLR 支持。您必须像这样手动写出这些范围:[\u1234-\u5678]
(用您的十六进制 Unicode 点更改 \u....
),其中 \u1234
是范围的开始,\u5678
结束。请注意,您可以在字符集中放置多个范围:[\u1234-\u1238\u3456-\u5679]
.
Thanks, but how about a regular expression in Antlr4 where I allow everything inside of a String except a character like '. But I say that a string start with and end with '
看起来像这样:
STRING : '\'' ~[']* '\'';
使用转义引号且不允许换行,请执行以下操作:
STRING : '\'' ( ~['\r\n] | '\' ['\] )* '\'';
在 Antlr4 语法中,我需要借助正则表达式来匹配拉丁文、西里尔文、波兰文和希腊字母以及特殊字符。这是我的:
STRING: ['][\p{L} 0-9\[\]\^$\.\|\?\*\+\(\)\~`\!@#%&\-_+={}""<>:;,\/°]*['];
所以我说 String
以 ''
开始和结束。在里面我可以有任何字母 (\p{L}
)、数字和特殊字符,除了 '
。我已经在 regex101.com 上测试过了,这正是我想要的。但在 Antlr4 中它不起作用。相反,我得到的最接近的是:
['][a-zA-Z0-9 \[\]\^$\.\|\?\*\+\(\)\~`\!@#%&\-_+={}""<>:;,\/°]*[']
但问题是像 'Ąłćórżnęł'
这样的东西在我的语言中不会被接受,但它应该被接受。
我在 Antlr4 中做错了什么或者这是一个限制?我怎样才能让它在 Antlr4 中工作?字符串是词法分析器规则。
\p{L}
不受 ANTLR 支持。您必须像这样手动写出这些范围:[\u1234-\u5678]
(用您的十六进制 Unicode 点更改 \u....
),其中 \u1234
是范围的开始,\u5678
结束。请注意,您可以在字符集中放置多个范围:[\u1234-\u1238\u3456-\u5679]
.
Thanks, but how about a regular expression in Antlr4 where I allow everything inside of a String except a character like '. But I say that a string start with and end with '
看起来像这样:
STRING : '\'' ~[']* '\'';
使用转义引号且不允许换行,请执行以下操作:
STRING : '\'' ( ~['\r\n] | '\' ['\] )* '\'';