用于获取更新字符串的正则表达式未获取


regular expression for getting update string is not getting

我有一个文件,其中包含许多更新查询和一些其他数据,我需要使用正则表达式从该文件中获取更新查询

我的文件包含:

2012-03-14 23:29:24 WebModule[]更新PAYOUT_HDR集合C_ELNO='665656'其中N_ID='68'和D_TO=TO_date('24/02/2012','dd/MM/yyyy')2012-03-1423:57:57 WebModule[]update address_dtl set C_FIRM_NAME='MISS',c_fname='ggg',c_lname='testtt.G',c_addr1='test
',c_addr2='测试',c_address3='测试,
testtt',c_district='31001',c_state='27',c_zip_code='444',c_tele_no='555555',c_mobile='444444',c_email='4444@44.com'其中n_id=522和c_type='666'

我试过

preg_match_all("/'update (.*)')/i", $contents, $matches, PREG_SET_ORDER);

但它不起作用。请帮我解决这个问题

preg_match_all("/update (.*'))/i", $contents, $matches, PREG_SET_ORDER);

如果查询以a)结束,则可以,但我需要所有更新查询

您的正则表达式中有一个错误。以下内容适用于您的示例输入。

preg_match_all("/update (.*'))/i", $contents, $matches, PREG_SET_ORDER);

也就是说,您当前的方法只匹配以a)结尾的查询。

更新

这将从您的示例字符串中获得两个更新查询:

<?php
$contents = "2012-03-14 23:29:24 WebModule[]update PAYOUT_HDR set C_ELNO='665656' where N_ID='68' and D_TO=to_date('24/02/2012','dd/MM/yyyy') 2012-03-14 23:57:57 WebModule[]update address_dtl set C_FIRM_NAME='MISS', c_fname='gggg', c_lname='testtt.G',c_addr1='test
',c_addr2='test',c_addr3='test,
testtt',c_district='31001',c_state='27',c_zip_code='444',c_tele_no='555555',c_mobile='444444',c_email='4444@44.com' where n_id=522 and c_type='666'";
$parts = preg_split('/'d{4}-'d{2}-'d{2} 'd{2}:'d{2}:'d{2}/', $contents);
$updates = array();
foreach($parts as $part){
    if(!trim($part)){
        continue;
    }
    preg_match_all("/update.*/si", $part, $matches);
    if(count($matches)){
        $updates[] = $matches[0][0];
    }
}
print_r($updates);

如果这只是文件中的一个字符串,那么您可以读取该文件并将所有数据放入一个变量中,然后您可以像以下那样拆分该字符串:-

$array = explode(" WebModule[]",$string);
echo "<pre>";
print_r($array);

$string是保持整个字符串的变量。

您不需要在更新中转义"u"-它假设您正在调用perl模式(PCRE)

/update (.*)')/i