2014-10-21 1 views
0

PHP가있는 SQL 문에서 첫 번째 SELECT와 마지막 FROM 사이의 모든 것과 일치하는 정규 표현식을 원합니다.preg_match 첫 번째 SELECT와 마지막 FROM 사이의 모든 것

`t1`.`id`, 
    `t1`.`created`, 
    (
     SELECT 
      `t2`.`content` 
     FROM 
      `table2` `t2` 
     WHERE 
      `t1`.`id` = `t2`.`id` 
    ) `sub` 

내가 나 자신이 일을했지만, 나는 그것이 제대로 작동 얻을 수 없다 : 나는 일치 할 문 위의 성명에서

SELECT 
    `t1`.`id`, 
    `t1`.`created`, 
    (
     SELECT 
      `t2`.`content` 
     FROM 
      `table2` `t2` 
     WHERE 
      `t1`.`id` = `t2`.`id` 
    ) `sub` 
FROM 
    `table1` `t1` 

을 : 는 예를 들어이 점을 넣어합니다.

답변

1
(?<=SELECT\s)(.*)(?=\sFROM) 

캡쳐를 가져옵니다. 데모를보십시오.

http://regex101.com/r/rQ6mK9/15

+0

감사합니다, 거의 작업 나는 그것을 원해. 방금이 쿼리와 관련하여 다른 문제가 발생했습니다. http://regex101.com/r/lD8uH4/1. where 절에 다른 select 문을 넣으면 잘못됩니다. – SheperdOfFire

+0

@ FIA2008 http://regex101.com/r/lD8uH4/2 – vks

+0

도움 주셔서 감사합니다! – SheperdOfFire

1

사용 DOTALL 수정 도트는 심지어 개행 문자와 일치 할 수 있도록합니다. 아래 정규식에있는 \K은 이전에 일치 한 문자를 인쇄에서 삭제합니다.

(?s)SELECT[^\n]*\n\K.*(?=[^\n]*FROM) 

또는

(?s)SELECT[^\n]*\n\K.*(?=\n[^\n]*?FROM) 

DEMO

당신이 이것을 달성하기 위해 기본 정규식을 사용할 수 있습니다
2

...

preg_match('~SELECT(.*)FROM~si', $text, $match); 
echo $match[1]; 

Code Demo

관련 문제