簡體   English   中英

ANTLR:匹配未轉義的字符?

[英]ANTLR: Match unescaped characters?

我有一條規則,

charGroup
    : '[' .+ ']';

但是我猜想它會匹配[abc\\]類的東西。 假設我只希望它匹配未轉義的] ,我該怎么做? 在正則表達式中,我會使用負向后看。

編輯:如果可能的話,我也希望它不貪婪/懶惰。 以僅匹配[a][a][b]

您可能想要執行以下操作:

charGroup
  :  '[' ('\\' . | ~('\\' | ']'))+ ']'
  ;

~('\\\\' | ']')匹配\\]以外的單個字符。 請注意,您只能取反單個字符! 沒有~('ab')這樣的東西。 經常犯的另一個錯誤是,解析器規則內部的求反不會否定字符,而是否定令牌。 示例如下:

foo : ~(A | D);

A : 'a';
B : 'b';
C : 'c';
D : ~A;

現在,解析器規則foo匹配令牌B或令牌C (因此僅匹配字符'b''c' ),而詞法分析器規則D匹配除'a'之外'a'任何字符。

我會在后面使用負數

那不是很復雜嗎? 怎么樣:

charGroup
    : '[' ('\\]' | .)+ ']';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM