繁体   English   中英

在PHP中拆分和正则表达式

[英]split and regular expression in 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]

我尝试了其他方法来执行此操作,但是很遗憾,它无法完成工作;(

同样有2000行相同的字符串....我的下一步是将每条记录插入到Excel工作表中。

提前致谢... :)

我没有得到您尝试在此处实现的模式。

您是否要删除所有

***Somestring***

但是,我不了解第一个值1DESIGNRESULTSM25Fe415的模式

要得到

[1]

[M25]

[Fe415]

只需构建一个小脚本即可完成工作。

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

干得好:

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

暂无
暂无

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

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