获取更新字符串的正则表达式没有得到

时间:2012-03-22 09:29:41

标签: php regex

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

我的文件包含:

  

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-14   23:57:57 WebModule [] update address_dtl set C_FIRM_NAME ='MISS',   c_fname ='gggg',c_lname ='testtt.G',c_addr1 ='测试
  'c_addr2 = '测试',c_addr3 =' 测试,
  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结尾,但我需要所有更新查询

3 个答案:

答案 0 :(得分:0)

如果这只是文件中的一个字符串,那么您可以读取该文件并将所有数据转换为变量,之后您可以将该字符串拆分为: -

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

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

答案 1 :(得分:0)

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

/update (.*)\)/i

答案 2 :(得分:0)

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

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