我需要解析一些包含目录路径的字符串。问题是包含转义的空格和其他转义符号。例如:
"/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
。那么如何指定规则以便字符串可以包含转义的空格?
答案 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">