2011-06-08 86 views
0

在我的標記生成器柔性正則表達式(.lex)文件我想匹配以下模式:不匹配正確

AaBC12/awD41/dfs21 etc... 

我寫這個規則

[A-Za-z]+[A-Za-z0-9]*[[/]+[A-Za-z][A-Za-z0-9]*]* 
{lline = cpflineno;cpflval.str = strdup(cpftext);return K_IDENTIFIER;} 

這條規則似乎是正確的我但如果我有一個這樣的輸入:

TOP/MD1 
TOP/MD2 
TOP/MD2/D/E 

我的輸出

TOP/MD1 
TOP/MD2 
TOP/MD2 
/D/E 

代替

TOP/MD1 
TOP/MD2 
TOP/MD2/D/E 

你能告訴我在哪裏,我的規則失敗?

回答

1

這個怎麼樣:

[A-Za-z]+[A-Za-z0-9]*([/]+[A-Za-z][A-Za-z0-9]*)* 

替換[]與(),您的意思是一組。

請注意,它將匹配foo////bar,如果你不想刪除第二個+(和第一個+也是這個問題,在這種情況下它是無用的)。

+0

這很明顯。我認爲[]工作是一樣的。我一定很累,謝謝你;) – djfoxmccloud 2011-06-08 14:11:02