2014-01-14 34 views
0

我想爲聲納插件構建一個解析器,其中的標記可以包含空格和製表符以便用它們來實現空格檢查規則。因此,我想將它們存儲到不同的令牌中。沒有標籤的空格的正則表達式

我設置空間和選項卡,TokenType:

.withChannel(regexp(TokenType.TAB, "\t")) 
    .withChannel(regexp(TokenType.WHITESPACE, "\\s")) 

但是,標籤被視爲空間令牌以及, 因爲Java中的正則表達式爲/s匹配任何空白字符(空格,製表符,行打破,回車)

什麼是正確的正則表達式區分製表符和空格?

+1

檢查http://stackoverflow.com/questions/3583111/regular-expression-find-spaces-tabs-space-but-not-newlines,只是把它左右 – MoRe

+0

在我的情況下,我需要單獨的正則表達式和簡單「[]」對我不起作用:/ – FILIaS

+0

我也試過:「[\\ s^\ t]」但仍然不起作用 – FILIaS

回答

2

有了:

.withChannel(new BlackHoleChannel("\n"))  //removes newlines from source code 
.withChannel(regexp(TclTokenType.TAB, "\t")) //matches tabs 
.withChannel(regexp(TokenType.WHITESPACE," ")) //matches spaces 

空間正確匹配,和標籤的認可。關鍵是在BlackHoleChannel

這是FILIaS從revision 15問題的解決方案。

3

我不熟悉的TokenType語法,但把所有的空白沒有選項卡,你可以使用:

[ \n\x0b\r\f] 

因爲\s是寫[ \t\n\x0B\f\r]的只有很短的形式。請參閱documentation

+0

它不是TokenType的有效語法,但無論在我的情況下, t甚至需要換行符或換行結束,只是空格,但是「[]」不能完成我的工作 – FILIaS

+1

那麼,你所謂的whitespaces意味着_spaces_? – MoRe

+0

好吧,是的! – FILIaS