3

私は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]/)

つまり、小文字が前にない大文字と一致します。もちろん、これは行ごとに 1 つしかカウントされないため、行ではなくストリームをトークン化し、トークンで作業することを検討することをお勧めします。

于 2012-12-05T11:51:46.627 に答える