2012-01-12 5 views
1

문자열로 문자열을 가져 오려면 RegEx (Insted of Substring)을 사용할 수 있습니까?RegEx 문자열에서 문자열 찾기

나는 (I 파일에서 읽고 있어요로 한 줄을) 내가 좀하고 싶습니다 정규식을 사용하여 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_])*이 표현식을 사용하면 SubString이나 Replace를 사용하여 나머지 부분을 제공 할 수있는 'INTO tableA'를 얻을 수 있지만 RegEx에서 수행 할 수 있습니다.

+0

어떤 언어를 사용하고 있습니까? 정규 표현식 기능은 언어마다 다르다. –

+0

사용하고 있습니다.Net (C#) – Kman

답변

2

사용 lookbehind이 정규식 :

(?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를 사용하여 첫 번째 캡처 그룹을 추출 할 수 있습니다.

* 및 은 여분의 공백을 무시해야합니다. 자바 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()); 
     } 

형식 (개행 또는하지 않음) 및 정확하게 출력하는 방법이 있지만 이것이 도움이되기를 바랍니다.

네,이 작업은 훨씬 더 간결하게 수행 할 수 있습니다. 그러나 명확성을 기하기 위해 여러 줄과 방법으로 나누었습니다.