2016-11-07 107 views
2

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

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

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

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

但问题是,像'Ąłćórżnęł'不会在我的语言被接受,但它应该是。

我在Antlr4做错了什么或者是一个限制?我如何设法让它在Antlr4中工作?字符串是Lexer规则。

回答

3

\p{L}不被ANTLR支持。您将不得不像这样手动编写这些范围:[\u1234-\u5678](使用您的十六进制Unicode点更改\u....),其中\u1234是范围的开始,\u5678结束。请注意,您可以在字符集中放入多于1个范围:[\u1234-\u1238\u3456-\u5679]

谢谢,但如何在Antlr4中的正则表达式,其中我允许一个字符串内的所有内容,除了像一个字符。但是我要说的是一个字符串开始与“

结束这将是这样的:

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

,并逃脱了报价,不允许换行,这样做:

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

谢谢,但如何在Antlr4中的正则表达式中,我允许字符串中的所有内容除了像''这样的字符。但我说一个字符串以'?开始并以'结束? – Devid

+0

@Devid检查我编辑的答案 –

+0

谢谢。在Antlr4中,我是这样做的:STRING:['](〜['] |'\'\'')* [']; – Devid