特定のテーブルをフィルター処理したい mysql 情報を含む 10 GB のファイルがいくつかあります。
クエリは次のようになります (ただし、改行は増減できます)。
SET INSERT_ID=2/\*!\*/;
at 858735202
121124 12:36:53 server id 1 end_log_pos 0 Query thread_id=9695754 exec_time=0 error_code=0
SET TIMESTAMP=1663753413/\*!\*/;
INSERT INTO `bank_accounts_daily`
(
`accounts_bank_md5` ,
`accounts_bank_payment_desc` ,
`accounts_bank_amount` ,
`accounts_bank_number` ,
`accounts_bank_sortcode` ,
`accounts_bank_currency` ,
`accounts_bank_date`,
`accounts_bank_code`
)
VALUES
(
'zxcvxzcvxzc4c9eeca78908296a2f007',
'NAMEJO M 1105294 BBP',
'278.50',
'645450441',
'20-55-19',
'1',
'26/55/2012',
'BBP'
)
/\*!\*/
私はこれを使用しています。これは、すべてのステートメントを取得するために機能します。
preg_match_all('/(SET INSERT_ID=([0-9]+)\/\*\!\*\/\;)(.*?)(\/\*\!\*\/\;)(.*?)(\/\*\!\*\/)/s', $input, $output);
しかし、それを展開して、特に「bank_accounts_daily」パターンに一致するように追加のパターンを追加しようとすると、何も取得されません (バッククォートがエスケープされているかどうかに関係なく):
preg_match_all('/(SET INSERT_ID=([0-9]+)\/\*\!\*\/\;)(.*?)(\/\*\!\*\/\;)(.*?)(INSERT INTO \`bank_accounts_daily\`)(.*?)(\/\*\!\*\/)/s', $input, $output);
なぜこれが機能しないのかわかりません。ブラケットなしでバリエーションを試しましたが、何も機能していません。また、私のアプローチには、私が見ていない潜在的な問題はありますか?