如何使用treetop解析包含空格和转义符号的解析目录路径?

时间:2012-04-09 11:26:51

标签: ruby regex parsing grammar treetop

我需要解析一些包含目录路径的字符串。问题是包含转义的空格和其他转义符号。例如:

"/dir_1/dir_2/dir_3/dir/another/dest_dir\ P\&G/"

请注意P\&G/之前有一个空格。

这是我的树梢语法(alpha_digit_special在开头包含空格)

rule alpha_digit_special
  [ a-zA-Z0-9.+&\\]
end

rule path_without_quotes
  ([/] alpha_digit_special*)+ 
end

rule quot_mark
  ["]
end

rule path_with_quotes
  quot_mark path_without_quotes quot_mark
end

rule path
  path_with_quotes / path_without_quotes
end

解析此字符串后,我得到nil。那么如何指定规则以便字符串可以包含转义的空格?

2 个答案:

答案 0 :(得分:1)

您不能使用alpha_digit_special *来处理反斜杠转义空格。 相反,您必须使用重复的字符单元,其中字符单元是反斜杠字符对或单个非反斜杠字符。这样的事情应该有效:

rule alpha_digit_special
  [a-zA-Z0-9.+&\\]
end

rule path_character
  '\\' (alpha_digit_special / ' ')
  /
  alpha_digit_special
end

rule path_without_quotes
  ([/] path_character* )+ 
end

请注意,上述内容不会接受反斜杠字符(不是空格也不是alpha_digit_special集)。我想你可以看到如何改变它。

答案 1 :(得分:0)

你试过\s吗?

test = "dest_dir P&G" 
test.match(/[a-zA-Z0-9_\s\&]+/)
 => #<MatchData "dest_dir P&G">