加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于匹配音乐和弦的正则表达式

发布时间:2020-12-14 06:30:32 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个函数来解析音乐和弦的字符串表示. 示例:C大调和弦 – Cmaj(这是我要解析的) 为了说清楚,和弦由三个不同的部分组成: 音符(C,D,E,F,G,A) 该笔记的意外事件(#,##,b,bb) 和弦名称 对于那些精通音乐的人来说,我并不是在考虑削减和弦(故意).
我正在尝试编写一个函数来解析音乐和弦的字符串表示.

示例: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)?)?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读