Estoy tratando de escribir una función para analizar la representación de cuerda de un acorde musical.Regex para hacer coincidir un acorde de música
Ejemplo: acorde de Do mayor ->Cmaj (esto es lo que quiero analizar)
Sólo para que quede claro, un acorde se compone de tres partes diferentes:
- la nota (C, D, E, F, G, A)
- las alteraciones para esa nota (#, ##, b, bb)
- el nombre del acorde
Para aquellos, conocedores de la música, no estoy considerando acordes de corte (a propósito).
La siguiente función está casi funcionando. Sin embargo, todavía no funciona para el siguiente caso:
- "C#" # maj partidos y debe
- "C#" # Maj7 partidos y debe
- "C# Maj2" # mathches y no debería
supongo que si podía hacer la parte chords
expresiones regulares obligados a estar al final de la expresión regular, hizo el truco. He intentado usar el $
tanto antes como después de esta cadena, pero no funcionó.
¿Alguna idea? Gracias.
public static void regex(String chord) {
String notes = "^[CDEFGAB]";
String accidentals = "[#|##|b|bb]";
String chords = "[maj7|maj|min7|min|sus2]";
String regex = notes + accidentals + chords;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(chord);
System.out.println("regex is " + regex);
if (matcher.find()) {
int i = matcher.start();
int j = matcher.end();
System.out.println("i:" + i + " j:" + j);
}
else {
System.out.println("no match!");
}
}
El patrón entre 'C# maj2' y' C# maj7' es idéntico (C# maj \ d), por lo que diferenciarlos no es realmente un trabajo para regex. Me gustaría tomar todas las instancias de ese patrón y luego usar algunos patrones de cadena más para validar. Sin embargo, podría compilar una expresión regular que incluya todos los dígitos aceptados como literales. –
Haría colecciones estáticas que contienen todos los acordes posibles. Que ver si la representación de cadena se encuentra en las Colecciones. – hovanessyan
"... Para aquellos, conocedores de la música, no estoy considerando los acordes de corte ..." Solo para el registro: Estás ignorando * la mayoría * de los acordes, no solo los acordes de corte. –