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