Ruby查找所有常量

Ruby查找所有常量,ruby,Ruby,我是Ruby新手,如果这是一个简单的问题,我很抱歉。 我想打开一个ruby文件并搜索所有常量,但我不知道正确的正则表达式 以下是我的简化代码: def findconst() filename = @path_main k= {} akonstanten = [] k[:konstanten] = akonstanten if (File.exists?(filename)) file = open(filename, "r") while (line = file.

我是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
def findconst()
filename=@path\u main
k={}
阿肯斯坦滕=[]
k[:konstanten]=akonstanten
如果(File.exists?(filename))
文件=打开(文件名为“r”)
while(line=file.get)
如果(行=~??)

k[:konstanten]正如塞尔吉奥所说,搜索带大写字母的单词不仅会得到常数,而且如果足够好,就足够了

您要查找的正则表达式类似于

if (line =~ /[^a-z][A-Z]/)
它表示匹配任何前面没有小写字母的大写字母。当然,每行只计算一个,所以你可能想考虑对流进行标记并处理令牌,而不是行。

< p>可以使用库来提取令牌。

例如,此代码将返回文件的常量和方法名称

A = "String" # Comment
B = <<-STR
  Yet Another String
STR

class C
  class D
    def method_1
    end
    def method_2
    end
  end
end

要可靠地执行此操作,您需要将代码解析为AST,而这不是您可以使用正则表达式来完成的。因此,我无法解析所有用CAP编写的表达式?您的文件是否只包含一组已知的类/模块?我想解析几个文件,只想知道哪些常量,它们包含的函数。@user1878703:您可以得到所有大写的单词,但这一个如何呢
MAGIC\u STRING=“这是大写的单词”
?你在这里看到了多少常数?这对我不起作用,它仍然可以找到像Controller这样的词,如果它很重要,我必须使用ruby 1.8.7。
Controller
是一个常数(当然,假设它是一个变量标识符),因为它是以大写字母开头的。这个单词可能不是最好的例子,但是它输出了所有以大写字母开头的单词,我只想要像这样的单词或例子
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"]