匹配线的开始

时间:2013-09-23 02:56:13

标签: javacc

我正在尝试匹配***,但我发现javacc在该行的任何位置匹配***。如果***之前除了空格或制表符之外没有其他字符,我如何确保它只与***匹配?这就是我目前所拥有的

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

但同样,这会匹配由零个或多个空格前置的任何***

1 个答案:

答案 0 :(得分: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 }