我想为Basenote创建一个令牌(编写Java MIDI播放器)。

用于使其成为令牌的Basenote的正则表达式为BASENOTE("[A-Ga-g]")。现在,我有了一个名称令牌,该令牌必须匹配模式“ C:贝多芬”。 (C代表作曲家)。这是我的名称令牌应该匹配的:NAME("(?<=C:)[^\n\r\f]+")。为简单起见,这意味着后跟“ C:”的任何内容均应匹配

问题是,我的词法分析器认为名称中的C是一个基符,并且按如下方式标记了“ C:贝多芬”:

<Basenote> C  <Name> Beethoven


而我只想要贝多芬。我该如何解决这个问题?

PS:我是正则表达式模式匹配的新手,所以我希望我在那里写的内容都有意义。

最佳答案

尝试使用此代替:

BASENOTE("[A-Ga-g](?!:)")

08-25 07:28