nun*_*nos 9 regex music-notation
我正在尝试编写一个函数来解析音乐和弦的字符串表示.
示例:C大调和弦 - > Cmaj(这是我要解析的)
为了说清楚,和弦由三个不同的部分组成:
对于那些精通音乐的人来说,我并不是在考虑削减和弦(故意).
以下功能几乎正常.但是,对于以下情况,它仍然不起作用:
我想如果我可以让chords正则表达式部分被迫在正则表达式的末尾,那就行了.我已尝试$在此String之前和之后使用它们但它不起作用.
任何的想法?谢谢.
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!");
}
}
Run Code Online (Sandbox Code Playgroud)
将以下行中的[和更改]为(和:)
String accidentals = "(#|##|b|bb)";
String chords = "(maj7|maj|min7|min|sus2)";
Run Code Online (Sandbox Code Playgroud)
否则,您只是在创建字符类,因此[maj7|maj|min7|min|sus2]只需匹配 letter 即可m。
我猜你也想添加一个结束锚点$?我发现您之前遇到过问题,但这可能是由于上述问题造成的。
另外,您是否希望(#|##|b|bb)成为可选的(即使用?: (#|##|b|bb)?)?