2012-03-02 131 views
0

正则表达式现在我有这个分裂和PHP

***FIRST***1DESIGNRESULTSM25Fe415 
***Second***Fe415 
***Third***1500.0mm 
***Fourth***300.0mmX600.0mmCOVER:40.0mm 
***Fifth***15ENDJOINT:13SHORTCOLUMN 
***Sixth***5472.00Sq.mm.REQD.CONCRETEAREA:174528.00Sq.mm 
***Seventh***12-25dia.(3.27%,5890.49Sq.mm.)(Equallydistributed) 
***Eighth***8mm 
***Ninth***300mmc/c 
***Tenth***Puz:3666.60Muz1:292.98Muy1:124.69 
***Eleventh*** 

(NOTE This line need to be removed 0.96(asperCl.39.6,IS456:2000)+++++15ENDJOINT:13Puz:3792.15Muz:320.53Muy:133.87IR:0.85) 

***FIRST***1DESIGNRESULTSM25Fe415 
***Second***Fe415 
***Third***1500.0mm 
***Fourth***300.0mmX600.0mmCOVER:40.0mm 
***Fifth***15ENDJOINT:13SHORTCOLUMN 
***Sixth***5472.00Sq.mm.REQD.CONCRETEAREA:174528.00Sq.mm 
***Seventh***12-25dia.(3.27%,5890.49Sq.mm.)(Equallydistributed) 
***Eighth***8mm 
***Ninth***300mmc/c 
***Tenth***Puz:3666.60Muz1:292.98Muy1:124.69 
***Eleventh*** 

(NOTE This line need to be removed :0.96(asperCl.39.6,IS456:2000)++++++15ENDJOINT:13Puz:3792.15Muz:320.53Muy:133.87IR:0.85) 

首先我需要首先 & 十一之间分配的值,并获得最后出来把这个系列。 ..

[1] 
[M25] 
[Fe415] 
[Fe415] 
[1500.0mm] 
[300.0mmX600.0mmCOVER:40.0mm] 
[15ENDJOINT] 
[5472.00Sq.mm] 
[12-25dia.(3.27%,5890.49Sq.mm.)] 
[8mm] 
[300mmc/c] 
[Puz:3666] 
[Muz1:292] 
[Muy1:124.69] 

我尝试了一些其他方法做到这一点,但不幸的是,它d int work;(

也有2000行的相同的字符串....我的下一步是插入每个记录到excel工作表。

在此先感谢... :)

+1

邮政代码/方法迄今为止,使我们可以更好地理解你的目标。 – 2012-03-02 11:04:15

+0

该代码不过是一个简单的爆炸函数,只是我用不同的模式多次使用它。并非常诚实,它已经是一个大混乱。但直到目前为止这项工作还在进行中。现在我需要砍掉其余的部分来完成我的工作的第一阶段。 – 2012-03-02 11:12:28

回答

0

只需建立一个微小的脚本,它做的工作。

您必须将日志文件字符串放入变量$ input。它甚至可以是数百个日志块。只是尝试yopurself,...

在这里你去:

<?php 

$input = 'YOUR_LOG_GOES_HERE'; 

$splitParts = preg_split('/.*?NOTE\sThis\sline.*?\n/', $input); 

foreach ($splitParts as $key => $part) { 
    $values = splitValues($part); 

    /**... do somthing with values... like put them in an excel sheet 
    * or just print them out 
    */ 
    echo '<pre>'; 
    print_r($values); 
    echo '</pre>'; 
} 


function splitValues($part) 
{ 
    $splitted = preg_split('/\n/', $part); 
    $data = array(); 

    /** Match 1. row **/ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*(.*)?DESIGNRESULTS([a-zA-Z]{1,}[0-9]{2})(.*)/', $splitted[1], $match); 
    $data[] = $match[1][0]; 
    $data[] = $match[2][0]; 
    $data[] = $match[3][0]; 

    /** Match 2. - 4. row **/ 
    for ($i=2; $i <= 4; $i++) { 
      $data[] = matchRow($splitted[$i]); 
    } 

    /** Match 5. row **/ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*(.*)?:.*$/', $splitted[5], $match); 
    $data[] = $match[1][0]; 

    /** Match 6. row **/ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*([0-9]{1,}.*)?\.REQD.*$/', $splitted[6], $match); 
    $data[] = $match[1][0]; 

    /** Match 7. row **/ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*(.*)?\(.*\)$/', $splitted[7], $match); 
    $data[] = $match[1][0]; 

    /** Match 8. - 9. row **/ 
    for ($i=8; $i <= 9; $i++) { 
      $data[] = matchRow($splitted[$i]); 
    } 

    /** Match 10. row **/ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*(Puz:[0-9]{1,}\.[0-9]{1,})(Muz1:[0-9]{1,}\.[0-9]{1,})(Muy1:[0-9]{1,}\.[0-9]{1,})$/', $splitted[10], $match); 
    $data[] = $match[1][0]; 
    $data[] = $match[2][0]; 
    $data[] = $match[3][0]; 

    return $data; 
} 

function matchRow($row) 
{ 
    $match = array(); 
    preg_match_all('/\*\*\*.*?\*\*\*(.*)/', $row, $match); 

    return $match[1][0]; 
} 

下面是新的字符串代码:你尝试

<?php 
$input = '#1-M25Fe415-Fe415-1500.0mm-300.0mmX600.0mm-40.0mm-15-5472.00Sq.mm-174528.00Sq.mm-12-25dia.(3.27%,5890.49Sq.mm.)-8mm-300mmc/c-Puz:3666.60Muz1:292.98Muy1:124.69-'; 

$data = array(); 
$data = preg_split('/-/', $input); 

$matches = array(); 
preg_match_all('/(Puz:[0-9]{1,}\.[0-9]{1,})(Muz1:[0-9]{1,}\.[0-9]{1,})(Muy1:[0-9]{1,}\.[0-9]{1,})$/', $data[13], $matches); 

$data[13] = $matches[1][0]; 
$data[14] = $matches[2][0]; 
$data[15] = $matches[3][0]; 

print '<pre>'; 
print_r($data); 
print '</pre>'; 
+0

感谢您的解决方案... – 2012-03-03 03:26:18

+0

以及你如何做到这一点...#1-M25Fe415-Fe415-1500.0mm- 。300.0mmX600.0mm-40.0毫米-15-5472.00Sq.mm-174528.00Sq.mm-12-25dia(3.27%,5890.49Sq.mm) - 8毫米-300mmc/C-PUZ:3666.60Muz1:292.98Muy1:124.69 - – 2012-03-03 03:27:13

+0

只需一个简单的preg_split和最后一个值的另一个正则表达式。它看起来并不那么难。去尝试一下自己吧。 :)我编辑了我的答案,并粘贴了新的代码。 – 2012-03-03 12:10:52

1

我不是让你尝试在这里实现模式..

你们是不是要删除所有

***Somestring*** 

不过,我不了解模式 第一个值1DESIGNRESULTSM25Fe415

得到

[1]

[M25]

[Fe415]

+0

上述字符串是日志文件的最终输出。我不能做任何事情...... 然后,当涉及到拆分我们可以创建一个爆炸函数与分隔符数组。在我的情况***首先***,***第二***等,但不知道我将如何删除剩余的不需要的片串..也请参考我以前的问题。 http://stackoverflow.com/questions/9528205/split-in-series-php – 2012-03-02 11:45:54