我正在使用 ruby Treetop 库开发一个脚本,并且在使用它的正则表达式语法时遇到问题。首先,许多在其他设置中工作的正则表达式在树顶中的工作方式不同。
这是我的语法:(myline.treetop)
语法 MyLine 规则线 字符串空白条件 结尾 规则字符串 [\S]* 结尾 规则空格 [\s]* 结尾 规则条件 “新”/“旧”/“二手” 结尾 结尾
这是我的用法:(usage.rb)
需要“红宝石” 需要“树顶” 需要“多语种” 需要'myline' 解析器 = MyLineParser.new p parser.parse("随机字符串新")
这应该会找到 new 这个词,而且确实如此!现在我不会扩展它,以便如果输入字符串变为“随机字符串另一个字符串新另一个和另一个”并且可能在规则条件的正则表达式之前和之后有任意数量的字符串后跟空格(包括选项卡),它可以找到新的。换句话说,如果我将任何带有“new”等单词的句子传递给它,它应该能够匹配它。
因此,假设我将语法更改为:
规则线 字符串空白条件空白字符串 结尾
然后,它应该能够找到匹配项:
p parser.parse("randomstring new anotherstring")
那么,我该怎么做才能让字符串空格在条件之前和之后重复呢?如果我尝试写这个:
规则线 (字符串空白)* 条件(空白字符串)* 结尾
,它进入一个无限循环。如果我将上面的 () 替换为 [],它会返回 nil 通常,当我使用上述内容时,正则表达式会返回匹配项,但树顶正则表达式不会。有人对如何解决这个问题有任何提示/要点吗?另外,由于树顶的文档不多,并且示例太琐碎或太复杂,有没有人知道更详尽的树顶文档/指南?