2012-03-02 126 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