我正在尝试编写一个函数来解析音乐和弦的字符串表示.
示例:C大调和弦 – > Cmaj(这是我要解析的)
为了说清楚,和弦由三个不同的部分组成:
>音符(C,D,E,F,G,A)
>该笔记的意外事件(#,##,b,bb)
>和弦名称
对于那些精通音乐的人来说,我并不是在考虑削减和弦(故意).
以下功能几乎正常.但是,对于以下情况,它仍然不起作用:
>“C#maj”#匹配并且应该
>“C#maj7”#匹配并且应该
>“C#maj2”#mathches,不应该
我想如果我可以让和弦正则表达式部分被迫在正则表达式的末尾,那就行了.我已尝试在此String之前和之后使用$both但它不起作用.
任何想法?谢谢.
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!"); } }
将[和]更改为(和)以下行:
String accidentals = "(#|##|b|bb)"; String chords = "(maj7|maj|min7|min|sus2)";
否则你只是制作角色类,所以[maj7 | maj | min7 | min | sus2]只是匹配字母m.
我猜你也想添加一个结尾锚$?我之前看到你有问题,但这可能是因为上述问题.
另外,你想要(#| ## | b | bb)是可选的(即用?:(#| ## | b | bb)?)?
原文地址:https://www.jb51.cc/regex/357216.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。