2016-05-30 6 views
0

私は次の内容のファイルを持っている:正規表現で作成されたテーブルの名前を取得する方法は?

create_table "animals", force: :cascade do |t| 
    t.integer "name" 
    t.datetime "created_at", null: false 
end 

最も興味深いと紛らわしい部分私には、私が何とかテーブルの名前を取得しなければならない正規表現を使用していることです。例えば

animals 

がどのように私は、この正規表現を使用して行うことができますか?

+3

について読む[*キャプチャグループ*](http://www.regular-expressions.info/brackets.html)。 –

+0

あなたの質問に対する答えは「はい」ですが、それはおそらくあなたが探している答えではありません。あなたの実際の質問は何ですか?それのどの部分に問題がありますか? –

+0

'/ create_table"(\ S *) "/ g' [テストはこちら](https://regex101.com/r/xZ6rI5/2) – jlib

答えて

1

説明

^create_table\s*"([^"]+)" 

Regular expression visualization

ライブデモ

https://regex101.com/r/kI7yZ1/1

説明

NODE      EXPLANATION 
---------------------------------------------------------------------- 
^      the beginning of a "line" 
---------------------------------------------------------------------- 
    .{12}     any character except \n (12 times) 
---------------------------------------------------------------------- 
    (?:      group, but do not capture: 
---------------------------------------------------------------------- 
    001      '001' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
    005      '005' 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
+0

すばらしい説明! –

+0

ニース!しかし、私は開始アンカーを失うかもしれません。それは最初にライン上にないかもしれません。そして、おそらく単一引用符で囲まれた文字列を許可してください。しかし、 'create_table \ s *([" '])((?:(!!\ 1)))+)\ 1'。 – ClasG

1
result = subject.scan(/create_table "(.*?)"/i) 

create_table "(.*?)" 
Options: Case insensitive; Exact spacing; Dot doesn’t match line breaks 
Match the character string “create_table "” literally (case insensitive) «create_table "» 
Match the regex below and capture its match into backreference number 1 «(.*?)» 
    Match any single character that is NOT a line break character (line feed) «.*?» 
     Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
Match the character “"” literally «"» 
関連する問題