Jason Cromer:
Estoy tratando de utilizar una expresión regular para enumeraciones de análisis sintáctico que son minúsculas, por ejemplo:
enum TransparencyState {
Gone, Translucent, Opaque
}
o
enum TransparencyState {
gone,
translucent,
opaque
}
Sin embargo, lo más cerca que puedo conseguir es (?:enum\s+[a-zA-Z0-9]+\s*\{|\G)\s+([a-zA-Z0-9_,\s]*)(?=[^{}]*\})
, pero eso no hace exactamente trabajo. Idealmente, sólo coincidiría con las constantes minúsculas en una lista de enumeraciones, cualquier cosa excepto todo mayúsculas (esencialmente en forma constante, como a continuación).
No se correspondería con:
enum TransparencyState {
GONE, TRANSLUCENT, OPAQUE_OR_DULL
}
Cualquier ayuda en gran medida sería apreciada.
Patata Tsu:
Prueba esta expresión regular:
^enum[^{]*{\s*(?!\b[A-Z]+\b)(\w+(?:\s*,\s*(?!\b[A-Z]+\b)\w+)*)\s*}
Hacer clic para una demostración
En JAVA, escapar cada \
con otra\
Explicación:
^
- afirma el principio de la líneaenum[^{]*{\s*
- partidosenum
seguidos por 0+ ocurrencias de cualquier carácter que no es un{
seguido de un{
seguido de 0+ espacios en blanco, el mayor número posible(?!\b[A-Z]+\b)
- búsqueda negativa hacia delante para asegurarse de que la siguiente palabra (valor de enumeración) no contiene sólo letras captial\w+
- partidos 1+ ocurrencias de letras de palabras (sólo si la condición negativa de búsqueda hacia delante es verdadera)(?:\s*,\s*(?!\b[A-Z]+\b)\w+)*
- Partidos 0+ otros valores de enumeración\s*}
- Partidos 0+ espacios en blanco seguidos por una}