我正在尝试为声纳插件构建一个解析器,其中标记可以包含空格和制表符,以便使用它们来实现空格的检查规则。因此,我想将它们存储到不同的令牌中。
我将空格和制表符设置为TokenType:
.withChannel(regexp(TokenType.TAB, "\t"))
.withChannel(regexp(TokenType.WHITESPACE, "\\s"))
但是,标签也被视为空格标记,
因为在Java中/s
的正则表达式匹配任何空格字符(空格,制表符,换行符,回车符)
区分标签与空格的正确正则表达式是什么?
答案 0 :(得分:3)
答案 1 :(得分:2)
使用:
.withChannel(new BlackHoleChannel("\n")) //removes newlines from source code
.withChannel(regexp(TclTokenType.TAB, "\t")) //matches tabs
.withChannel(regexp(TokenType.WHITESPACE," ")) //matches spaces
正确匹配空格,并识别标签。关键在BlackHoleChannel
。
这是来自问题的revision 15的FILIaS解决方案。