2012-01-12 15 views
1

文字列内の文字列を取得するためにRegEx(insted of Substring)を使用できますか?RegEx文字列内の文字列を検索

私は(私は、ファイルから読んでいるように、単一の行を)私が取得したいと思い正規表現を使用するINSERT文

INSERT INTO tableA VALUES (col1, col2, col3); 
INSERT INTO tableB VALUES (col1, col2, col3); 
INSERT INTO tableC VALUES (col1, col2, col3); 

のシリーズからちょうどテーブル名を取得したいのですが:

tableA 
tableB 
tableC 

(INTO)([a-z_])*私は 'INTO tableA'を提供しています。私はSubStringやReplaceを使用して残りの部分を与えることができますが、これはRegExで行うことができます。

+0

あなたはどの言語を使用していますか?正規表現の機能は、言語から言語に大きく異なります。 –

+0

私は使用しています。ネット(C#) – Kman

答えて

2

使用後読みと、この正規表現:

(?i)(?<=into\s+)\S+ 

var tables = Regex.Matches(s, @"(?i)(?<=into\s+)\S+") 
    .Cast<Match>().Select(m => m.Value); 
+0

ありがとう!魅力的な作品! – Kman

+0

@Kman、よろしくお願いします。 –

0

テキストエディタを使用し、次のように置き換え+検索:

Find: ^INSERT INTO (.*) VALUES.* 
Replace: \1 

Regular Expressionオプションをチェックしてください。

これは、私のメモ帳の++画面がどのように見え、私を信頼しているかを示しています。

enter image description here

0

あなたは括弧を使用して、マッチした文字列から部分をキャプチャすることができます。試合の結果から

^ *INSERT\s+INTO\s+(\w+) 

を、あなたはあなたの言語に応じて、\1または$1を使用して最初のキャプチャグループを抽出することができます。

*およびは余分な空白を無視するものとします。 JavaでPHP

$regex = "/INSERT INTO (.*) VALUES/"; 

0

String regex = "INSERT INTO (.*?) VALUES"; 

最初のキャプチャグループは、あなたが望むものを開催します。あなたがC#を使用しているので

1

、私は最初から最後までそれを行うだろうかを指定します:

tableA 
tableB 
tableC 

あなたの正確な入力のわからない:これは、以下を書き出します

 //create regex - the (.*?) is a capture group 
     var regex = new Regex("INSERT INTO (.*?) VALUES"); 

     //mimic text lines read from a file 
     var sqlStrings = new string[] {"INSERT INTO tableA VALUES (col1, col2, col3)", "INSERT INTO tableB VALUES (col1, col2, col3)", "INSERT INTO tableC VALUES (col1, col2, col3)"}; 
     foreach (var line in sqlStrings) 
     { 
      //get the first match with the regex we created 
      var match = regex.Match(line); 

      //print out the first capture group 
      Console.WriteLine(match.Groups[1].ToString()); 
     } 

形式(改行または改行なし)と正確にどのように出力したいのですが、これが役立つことを願っています。

はい、これはもっと簡潔に行うことができますが、わかりやすくするために、私は複数の行と方法で分割しています。