由两个封闭的正则表达式的规则/

时间:2014-06-01 14:56:20

标签: ruby treetop

如何使用树梢匹配一对/个字符之间的所有内容?我还想匹配转义的/字符。例如,如果我要解析“正则表达式”:

/blarg: dup\/md5 [0-9a-zA-Z]{32}/

结果将返回:

blarg: dup\/md5 [0-9a-zA-Z]{32}

1 个答案:

答案 0 :(得分:0)

这应匹配两个/字符内的所有内容,包括转义斜杠。我正在使用Ruby的DATA __END__功能,以便所有内容都可以在一个文件中运行。

另请注意,您可以标记已解析表达式的部分内容,然后将其用作函数。在下面的示例中,我标记了inside。这也可以作为elements[1]访问,而不是被标记。

这类似于matching a string,您可以在树顶文档中找到它。

require 'treetop'
Treetop.load_from_string DATA.read

parser = RegexParser.new

puts parser.parse('/blarg: dup\/md5 [0-9a-zA-Z]{32}/').inside.text_value

# => blarg: dup\/md5 [0-9a-zA-Z]{32}

__END__
grammar Regex
   rule regex
      '/' inside:('\/' / !'/' .)* '/'
   end
end