Expresión regular para coincidir con una constante entera literal.
Estaba pensando en analizar una lista de enteros (de una cadena de propiedad). Sin embargo, me gustaría ir más allá de los valores decimales positivos y negativos y analizar cualquier cadena que indique un literal de entero de Java (JLS 17) como se puede encontrar en el código fuente. De manera similar, me gustaría ser indulgente con respecto a cualquier prefijo, separador y apéndice alrededor de los enteros mismos. En otras palabras, quiero encontrarlos usando llamadas repetidas a Matcher.find()
.
¿Existe una expresión regular que coincida con todos los literales de enteros de Java posibles? No es necesario comprobar los límites superiores e inferiores.
Aunque he vinculado explícitamente con JLS, mostraré algunos números válidos e inválidos:
-1
: se encuentra el1
, pero el menos es un operador unario (ajustaré si es necesario)0x00_00_00_0F
: se encuentra el valor quince como dígitos hexadecimales, con una barra baja para separar los dos nibbles0b0000_1111
: se encuentra el valor quince en binario017
: se encuentra el valor octal de quince
davy.ai
Para coincidir con todas las posibles literales enteras de Java, se puede utilizar la siguiente expresión regular:
Esta regex coincide con cualquier combinación de los siguientes patrones:
-
).0
seguido de cualquier cantidad de dígitos octales ([0-7]*
).[1-9]
) seguido de cualquier cantidad de dígitos ([0-9]*
).0
seguido de unax
y uno o más dígitos hexadecimales ([0-9a-fA-F]+
).0
seguido de unab
y uno o más dígitos binarios ([01]+
).[lL]|[uU]|[lL][uU]|[uU][lL]
). Esto puede ser uno de los siguientes:l
oL
para el tipolong
.u
oU
para el tipounsigned
.l
comou
oL
yU
para el tipounsigned long
.Esta regex está diseñada para ser indulgente con respecto a cualquier prefijo, separador y apéndice alrededor de los enteros en sí mismos, como se solicitó en la pregunta. Se pueden usar llamadas repetidas a
Matcher.find()
para encontrar todas las coincidencias en la cadena de entrada.