2013-09-23 39 views
0

我想匹配***,但我發現javacc匹配***行中的任何位置。在***之前,除空格或製表符之外沒有其他字符時,如何確保它僅匹配***?這是我目前有該行的匹配開始

< HORIZONTAL_RULE: <ZERO_OR_MORE_OF_TAB_OR_SPACE> ("**")("*")+> 
| <#ZERO_OR_MORE_OF_TAB_OR_SPACE: (" " | "\t")*> 

但同樣,這種匹配零個或多個空格前面加上任何***

回答

1

使用詞彙狀態。使用DEFAULT狀態作爲行的開始。

// Note that states do not apply to private regular expression definitions. 
TOKEN: <#ZERO_OR_MORE_OF_TAB_OR_SPACE: (" " | "\t")*> 

<DEFAULT> TOKEN: { 
    <HORIZONTAL_RULE: <ZERO_OR_MORE_OF_TAB_OR_SPACE> ("**")("*")+ > : MIDLINE 
} 
<DEFAULT, MIDLINE> SKIP { <OTHERCHAR: ~["\n","\r"]> : MIDLINE } 
<DEFAULT, MIDLINE> SKIP { <NEWLINE: "\n" | "\n\r" | "\r" | "\r\n"> : DEFAULT } 
+0

快速的問題,這個說法讓我失去了。請你再多點光。 '請注意,各州不適用於私人正則表達式定義。' – ShaggyInjun

+0

道歉,我忘了先謝謝你,所以現在不讓我編輯評論。但是,謝謝你。 – ShaggyInjun

+0

謝謝。我只是想解釋爲什麼我沒有將任何詞彙狀態與ZERO_OR_MORE_OF_TAB_OR_SPACE製作關聯起來。 –