繁体   English   中英

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

[英]regular expression for getting update string is not getting

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

我的文件包含:

2012-03-14 23:29:24 WebModule [] update PAYOUT_HDR set C_ELNO ='665656'其中N_ID = '68'和D_TO = to_date('24 / 02/2012','dd / MM / yyyy')2012- 03-14 23:57:57 WebModule []更新address_dtl设置C_FIRM_NAME ='MISS',c_fname ='gggg',c_lname ='testtt.G',c_addr1 ='test
',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);

好的,如果查询以)结尾,但我需要所有更新查询

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

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

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

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

/update (.*)\)/i

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

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

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

更新资料

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM