3

我是 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
4

2 回答 2

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"]
于 2012-12-05T12:27:40.593 回答
0

正如塞尔吉奥所说,用大写字母搜索单词不仅会给你常量,而且如果它足够好,它就足够好了。

您正在寻找的正则表达式类似于

if (line =~ /[^a-z][A-Z]/)

这表示匹配任何前面没有小写字母的大写字母。当然,这只会每行计算一个,因此您可能想考虑对流进行标记并处理标记,而不是行。

于 2012-12-05T11:51:46.627 回答