簡體   English   中英

PHP preg_match_all匹配多個模式

[英]PHP preg_match_all to match multiple patterns

我有幾個帶有mysql信息的10GB文件,我想過濾特定的表。

查詢看起來像這樣(雖然可以有更少或更多的換行符):

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);

我不明白為什么這不起作用。 我嘗試過沒有括號的變體,但沒有任何效果。 此外 - 我的方法是否有任何潛在的問題,我沒有看到?

試試這個正則表達式:

/(SET INSERT_ID=([0-9]+)\/\\\*\!\\\*\/\;)(.*?)(\/\\\*\!\\\*\/\;)(.*?)(INSERT INTO `bank_accounts_daily`)(.*?)(\/\\\*\!\\\*\/)/s

您沒有匹配/\\*!\\*/ markers中的反斜杠。 我不知道原始正則表達式是如何起作用的,因為它也有這個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM