我是Ruby的新手,很抱歉,如果这是一个简单的问题。 我想打开一个ruby文件并搜索所有常量,但我不知道正确的正则表达式。
这是我的简化代码:
def findconst()
filename = @path_main
k= {}
akonstanten = []
k[:konstanten] = akonstanten
if (File.exists?(filename))
file = open(filename, "r")
while (line = file.gets)
if (line =~ ????)
k[:konstanten] << line
end
end
end
end
答案 0 :(得分:2)
您可以使用Ripper库来提取令牌。
例如,此代码将返回文件的常量和方法名称
A = "String" # Comment
B = <<-STR
Yet Another String
STR
class C
class D
def method_1
end
def method_2
end
end
end
require "ripper"
tokens = Ripper.lex(File.read("file.rb"))
pp tokens.group_by { |x| x[1] }[:on_ident].map(&:last)
pp tokens.group_by { |x| x[1] }[:on_const].map(&:last)
# => ["method_1", "method_2"]
# => ["A", "B", "C", "D"]
答案 1 :(得分:0)
正如Sergio所说,使用Caps搜索单词不仅会给你常量,而且如果它足够好就足够了。
您正在寻找的正则表达式类似于
if (line =~ /[^a-z][A-Z]/)
其中表示匹配任何没有小写字母的资本。当然这只会计算每行一个,所以你可能会考虑对流进行标记并处理令牌,而不是行。