如何将一对/
字符与树顶之间的所有内容匹配?我也想匹配转义/
字符。例如,如果我要解析“正则表达式”:
/blarg: dup\/md5 [0-9a-zA-Z]{32}/
结果将返回:
blarg: dup\/md5 [0-9a-zA-Z]{32}
这应该匹配两个/
字符内的所有内容,包括转义的斜杠。我正在使用 Ruby 的DATA
__END__
功能,以便所有内容都可以在单个文件中运行。
另外,请注意,您可以标记已解析表达式的某些部分,然后将它们用作函数。在下面的示例中,我标记了inside
. 这也可以被访问elements[1]
而不是被标记。
这类似于匹配您可以在树顶文档中找到的字符串。
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