2012-06-23 4 views
6

SQL SELECT 문에서 필드 목록을 분할하는 정규 표현식을 찾고 있습니다. PHP 정규식 SQL 필드 목록을 분할

는 이미 쿼리의 나머지 필드 목록을 추출, 그래서처럼 나는 보일 수 문자열 왼쪽 오전 :
field1,field2,field3,CONCAT(field1,field2) AS concatted,IF(field1 = field2,field3,field4) AS logic 

내가 논리적 인 접근 방식이에 문자열을 분할하는 것입니다 생각 쉼표로 쉼표가 나타나지 않는다면 옳은 정규 표현식을 찾아야합니다.

내가 얻으려고하는 최종 결과는 어떤 필드가 테이블에서 직접 선택되고 어떤 것이 SQL 표현식으로 만들어 졌는지를 알아내는 것이므로 나중에 필터를 사용할지 여부를 결정할 수 있습니다. WHERE 또는 HAVING 절.

일단 필드 목록이 있으면 완벽하지는 않지만 SQL을 작성하는 방식으로 작동해야하는 'AS'키워드가 있는지 확인할 수 있습니다.

(앨리어싱 수 없거나 'AS'를 사용하지 않고 할 수 있으나 표현 아니지만 앨리어싱 된 필드 및 표현식 사이 differenciates 다른 방법을 제안한 보너스 포인트)이 정규식해야

답변

4

작업 : PHP에서

/,(?![^()]*+\\))/ 

예 구현, 여기 :

$vv = 'field1,field2,field3,CONCAT(field1,field2) AS concatted,IF(field1 = field2,field3,field4) AS logic'; 

$arr = preg_split ("/,(?![^()]*+\\))/", $vv); 
foreach ($arr as &$value) { 
    print($value); 
} 
+0

이 작업을 완벽하게 수행 한 것처럼 보입니다. 감사합니다. – Codecraft

0

그것이 t 온다 o SQL과 같은 불규칙한 언어를 파싱하면 정규 표현식 대신 적절한 파서를 사용해야합니다.

이 경우 SQL parser in PHP 또는 PEAR’s SQL_Parser을 사용할 수 있습니다.