2013-03-29 19 views
0

我想爲Basenote創建一個Token(編寫Java MIDI播放器)。不想匹配char和其他char - 正則表達式

Basenote使它成爲令牌的正則表達式是BASENOTE("[A-Ga-g]")。現在,我有一個名稱令牌,它必須與模式「C:貝多芬」相匹配。 (C代表作曲家)。這是我的名字令牌應該匹配的:NAME("(?<=C:)[^\n\r\f]+")。爲簡單起見,這意味着什麼其次是「C:」應該匹配

的問題是,我的詞法分析認爲,在名稱中的C是Bas​​enote,它標記化「C:貝多芬」如下:

<Basenote> C <Name> Beethoven 

雖然我只是想要貝多芬。我該如何解決這個問題? PS:我很新的正則表達式模式匹配,所以我希望無論我寫在那裏是有道理的。

+0

Ununderstandable。 – Maroun

+0

你能給我們一個原始字符串的例子,告訴我們你想從中得到什麼。 –

+0

原始字符串是(「C:貝多芬」),我只想要貝多芬。我的代碼會給我C和貝多芬(C作爲基調,貝多芬作爲一個名字),因爲我有一個可以捕獲A-Ga-g中任何角色的Basenote字段。我想解決這個問題。對不起,如此不清楚。我只是自己學習東西。謝謝。 – newenthusiast

回答

3

嘗試使用這個:

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

儘管這符合「要求」,但它仍然會匹配:「行李:Foo」或「cabbagesareneativeativenergy」。 – 2013-03-29 21:06:25

+0

@pst - 是的,這是真的。但是我不明白這有什麼關係? – Aust

+0

好吧,現在他開始爲Composer Assistant添加一個「CA:」字段。它打破了。所以.. *相關*? – 2013-03-29 21:09:34

相關問題