0

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

"/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在解析这个字符串后得到。那么如何指定规则以使字符串可以包含转义的空格?

4

2 回答 2

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 集中)。我想你可以看到如何改变它。

于 2014-11-18T23:49:55.407 回答
0

你试过了\s吗?

test = "dest_dir P&G" 
test.match(/[a-zA-Z0-9_\s\&]+/)
 => #<MatchData "dest_dir P&G">
于 2012-04-09T11:31:02.543 回答