Regex ANTLR4-匹配超过9的值?

Regex ANTLR4-匹配超过9的值?,regex,antlr4,Regex,Antlr4,所以,我又在我的汇编程序上工作了,这次我在用浮点寄存器。基本上,有32个fp寄存器。所以,我想匹配它们,如果我写F0,F1,F2,…,F31。我在我的lexer中写了以下内容: REG : ('R0'|'r0') | ('AT'|'at') | ('v'[0-1]|'V'[0-1]) | ('a'[0-3]|'A'[0-3]) | ('t'[0-9]|'T'[0-9]) | ('s'[0-9]|'S'[0-8]) | ('k'[0-1]|'K'[0-1]) | ('GP'|'gp

所以,我又在我的汇编程序上工作了,这次我在用浮点寄存器。基本上,有32个fp寄存器。所以,我想匹配它们,如果我写F0,F1,F2,…,F31。我在我的lexer中写了以下内容:

REG
 : ('R0'|'r0')
 | ('AT'|'at')
 | ('v'[0-1]|'V'[0-1])
 | ('a'[0-3]|'A'[0-3])
 | ('t'[0-9]|'T'[0-9])
 | ('s'[0-9]|'S'[0-8])
 | ('k'[0-1]|'K'[0-1])
 | ('GP'|'gp')
 | ('SP'|'sp')
 | ('FP'|'fp')
 | ('ra'|'RA')
 | ('f'[0-31]|'F'[0-31])+
 ;
基本上,这里的每一个注册都没有任何问题。但F0-F31似乎不起作用。我对它进行了测试,发现它只与F0-F3匹配,但没有更高。这在当时是非常明显的,我不知道如何匹配超过10的值。我还尝试了一些变通方法,比如在其他方法后面添加更多的[0-9],但这没有帮助,因为这样会匹配以后的值,如F36或F39。你知道我该怎么处理吗


提前感谢。

[0-31]
0
1
2
3
1
(再次)匹配。要强调的是:正则表达式类不匹配数值,但匹配(文本)字符

要匹配F0、F1、F2、…、F31(和F0、F1、F2、…、F31),请执行以下操作:

FREG
 : [fF] ( [0-9]         // matches f0..f9 (and F0..F9) 
        | [1-2] [0-9]   // matches f10..f29 (and F10..F29)
        | '3' [01]      // matches f30 or f31 (and F30 or F31)
        )
 ;
您完整的
REG
规则可以编写如下:

REG
 : [rR] '0'
 | 'AT' | 'at'
 | [vV] [01]
 | [aA] [0-3]
 | [tT] [0-9]
 | [sS] [0-9]
 | [kK] [01]
 | 'GP' | 'gp'
 | 'SP' | 'sp'
 | 'FP' | 'fp'
 | 'RA' | 'ra'
 | [fF] ( [0-9] | [1-2] [0-9] | '3' [01] )
 ;

注意
[01]
[0-1]
匹配相同:要么
'0'
要么
'1'
。还要注意,
'ra'|'ra'
'ra'
不匹配。如果您希望
'Ra'
'Ra'
也匹配,请这样写:
[rR][aA]

非常感谢。现在一切都很好。