我正在开发一个简单的搜索工具。它搜索命令行参数定义的目录中的源代码文件,例如:
finder 'path' 'keyword'
我在如何正确地将给定参数转换为路径字符串方面遇到了困难,我可以在 Dir.chdir(路径)中使用它。这就是我的意思,根据我的逻辑,我有4个不同的案例:
以下是我现在所拥有的:
def expand_path(path)
case path
when '.'
return '.'
when /\/[a-z]*/.match(path)
return Dir.pwd + path
when /\.\/[a-z]*/.match(path)
return Dir.pwd + path[1..-1]
when /~(\/[a-zA-Z\w]*)+/.match(path)
return File.expand_path(path, __FILE__)
else
puts "Wrong path name"
end
end
我不确定是否有更好的方法,这就是我想出来的。 尽管如此,我的方法并不奏效。我不确定正则表达式或其他内容是否存在问题。我是Ruby世界的新手,所以,我可能只是犯了一些愚蠢的错误。
[解决]
def expand_path(path)
case path
when '.'
return '.'
when /~(\/[a-zA-Z\w]*)+/
return File.expand_path(path, __FILE__)
when /\.\/[a-z]*/
return Dir.pwd + path[1..-1]
when /\/[a-z]*/
return Dir.pwd + path
else
puts "Wrong path name"
end
end
答案 0 :(得分:1)
如你所说,问题已经解决了,你的正则表达式中至少有1点可以改进,[a-zA-Z\w]
可以只用\w
替换,因为它已经包含{ {1}}。
\ w代表"单词字符"。它始终与ASCII字符匹配 [A-ZA-Z0-9_]。请注意包含下划线和数字。
此外,您的上一个a-zA-Z
包含仅与when
匹配的/\/[a-z]*/
正则表达式。如果这是您想要的,那么好吧,如果没有,请将/
替换为*
。 +
也是如此 - 它将匹配/\.\/[a-z]*/
。如果您想匹配./
+至少1个字符,则需要用加号替换adterisk。
所以,我建议:
./