和音の文字列表現を解析する関数を作成しようとしています。
例: C メジャー コード -> Cmaj (これは解析したいものです)
わかりやすくするために、コードは 3 つの異なる部分で構成されています。
- 音符 (C、D、E、F、G、A)
- その音符の臨時記号 (#、##、b、bb)
- コードネーム
音楽に詳しい方、スラッシュコードは考えていません(わざと)。
以下の機能はほぼ動作しています。ただし、次の場合はまだ機能しません。
- "C#maj" # 一致し、すべきである
- "C#maj7" # 一致し、すべきである
- "C#maj2" #一致し、すべきではない
chords
正規表現の最後に正規表現の部分を強制することができれば、うまくいったと思います。$
この文字列の前後の両方を使用してみましたが、うまくいきませんでした。
何か案が?ありがとう。
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!");
}
}