PHP의 정규식을 사용하여 SQL 쿼리에서 SELECT와 FROM 사이의 문자열을 추출하는 방법은 무엇입니까?

스티브

정규식 (preg_match 또는 preg_replace)을 사용하여 아래 문자열을 추출하는 방법 :

SELECT id FROM table WHERE 1"id" 와 일치합니다.

SELECT name, (SELECT price FROM table2 WHERE id = '1') var FROM table1 WHERE 1"name, (SELECT price FROM table2 WHERE id = '1') var" 과 일치합니다.

카시미르와 히 폴리 테

목표가 쿼리로 고급 작업을 수행하는 것이라면 가장 좋은 방법은 SQL 파서를 사용하는 것입니다 (예 : 제안 된대로 "php sql 파서"). SELECT와 FROM 사이의 콘텐츠 만 가져 오려면 다음을 사용할 수 있습니다.

$test_queries = array(
    'SELECT id FROM table WHERE 1',
    'SELECT name, (SELECT price, (SELECT 1+1) FROM table2) var FROM table1',
    'SELeCT FROMAGE, \'\\\'((\', \'"\")(\', "\'\"\\\" FrOM table');

$pattern = <<<'LOD'
~
 # definitions
 (?(DEFINE)
   # content inside quotes
   (?<quoted> (["']) (?> [^"'\\]++ | \\{2} | \\. | (?!\g{-1})["'] )*+ \g{-1} )

   # nested parenthesis
   (?<nested> ( \( (?> [^()"']++ | \g<quoted> | (?-1) )*+ \) ) )

   # content between SELECT and FROM
   (?<content> (?> [^(F"']++ | \BF | F(?!ROM\b) | \g<quoted> | \g<nested> )++ )
 )

 # pattern
 \bSELECT\b (?<result> \g<content> ) FROM\b
~xis
LOD;

foreach ($test_queries as $k => $test_query) {
    if (preg_match($pattern, $test_query, $match))
        echo '<br/>' . $k . ') ' . trim($match['result']);
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관