Ruby查找所有常量
我是Ruby新手,如果这是一个简单的问题,我很抱歉。 我想打开一个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.
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"]