[英]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.