0

INSERTステートメントで「VALUES」という単語の後の文字列の位置を見つけようとしています。これは実際の行データの前の位置になります。

INSERTステートメントのパターンを取得するために正規表現を使用する必要があり、「VALUES」という単語を検索するためにstrposを使用する必要はないことはわかっていますが、正規表現関数に関しては、少し初心者です。

更新しました

")VALUES("の位置を見つけて、VALUESが新しい行にある場合があるため、括弧の間に空白、\ n、\ r、\tなどを許可したいと思います。

ありがとう

SQLファイル:

# ------------------------------

# --
# -- Dumping data for table `table_a`
# --

INSERT INTO `table_a` (`a`, `b`, `c`, `d`) 
VALUES -- get position 
(1, 'b', 'c', 'd'),
(2, 'b', 'c', 'd'),
(3, 'b', 'c', 'd');

# ------------------------------

# --
# -- Dumping data for table `table_b`
# --

INSERT INTO `table_b` (`a`, `b`, `c`, `d`) VALUES -- get position 
(1, 'b', 'c', 'd'),
(2, 'b', 'c', 'd'),
(3, 'b', 'c', 'd');
4

1 に答える 1

0

これでうまくいくはずです:

$content = file_get_contents('/path/to/dump.sql');
$pattern = '/\)\s+VALUES\s+\(/U';
$matches = array();
$match_count = preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE);

// trim off the parenthesis and whitespace from each match and add length of remaining portion of match string to the match offset to get offset at end of 'VALUES'
$offsets = array();
foreach($matches[0] as $match) {
    $offsets[] = $match[1] + strlen(rtrim(substr($match[0], 0, -1)));
}
于 2013-01-31T06:10:13.727 に答える