как разделить строку с символами и цифрами - PullRequest
2 голосов
/ 02 марта 2012

Я хочу разделить строку в таблице, и мне нужно

выход:

// First Output
$name ='aaaa';
$first='DUT.A1';
$second='E3.3 H2.3 Y3.333 h88.h fdfd.87';
$third ='J66.H3';

// SecondOutput
$name ='bbbb';
$first='DUT.A2';
$second='F2.2 F3.1 Y1.1';
$third ='J30.A1';

Введите:

$a  = "aaaa ; DUT.A1 E3.3 H2.3 Y3.333 h88.h fdfd.87 J66.H3";
$b  = "bbbb ; DUT.A2 F2.2 F3.1 Y1.1 J30.A1";
$c  = "cccc ; DUT.A3 H2.3 Y3.333 h88.h Y1.1 J45.G2";

Использование функции разнесения для деления переменной как

$exp = explode(";",$a);
$name = $exp[0];
$x = $exp[1];
$x1 = explode(" ",$x);
$total = count($x1);
$first = $x1[1];
$loop_end = $total-2;

for($i=2;$i<=$loop_end;$i++) {
    $second .= $x1[$i]."";
}
$third = $x1[$total-1]

;

Использование для отображения над выводом.

если я дам,

$var  = "haha ; J1.A1 DUT.A1  DUT.A2 C1.1 C2.1 ,
              F2.1 F4.1 K1.1 ,
              F2.1 F4.1 K1.1 ,
              F2.1 F4.1 K1.1 "; 

Я хочу перед точкой с запятой в качестве имени, сначала в строке типа DUT.xx (без пробелов, например DUT.A1 DUT.A2) Символ начинается с буквы J и после числового значения сохраняется в третьем (например, J1.A1 как третье не J после персонажа). Символы баланса хранятся в переменной Second, например (например,

$second =  'C1.1 C2.1,F2.1 F4.1 K1.1,F2.1 F4.1 K1.1,F2.1 F4.1 K1.1';

)

1 Ответ

2 голосов
/ 02 марта 2012

Это желаемый результат?

$arr = array(
    "aaaa ; DUT.A1 E3.3 H2.3 Y3.333 h88.h fdfd.87 J66.H3",
    "bbbb ; DUT.A2 F2.2 F3.1 Y1.1 J30.A1",
    "cccc ; DUT.A3 H2.3 Y3.333 h88.h Y1.1 J45.G2",
    "haha ; J1.A1 J1.A2 DUT.A1  DUT.A2 C1.1 C2.1 ,F2.1 F4.1 K1.1 ,F2.1 F4.1 K1.1 ,F2.1 F4.1 K1.1 ");


foreach ($arr as $item) {
    echo "<b>item</b> = $item<hr/>";
    $parts = preg_split('/\s*;\s*/',$item);

    $name = $parts[0];
    $first = array();
    $second = array();
    $third = array();

    $split = preg_split('/\s*,\s*/',$parts[1]);

    foreach ($split as $values) {
        preg_match_all('/\b[\w\d]+\.[\d\w]+\b/',$values,$value);
        $sec = array();
        foreach ($value[0] as $item) {
            preg_match('/^DUT\./',$item,$match);
            if (!empty($match[0])) {
                $first[] = $item; continue;
            }
            preg_match('/^J\d+\./',$item,$match);
            if (!empty($match[0])) {
                $third[] = $item; continue;
            }
            $sec[] = $item;
        }
        $second[] = implode(' ', $sec);
    }

    $first = implode(' ', $first);
    $second = implode(',', $second);
    $third = implode(' ', $third);

    echo 'name = ' . $name . "\n";
    echo 'first = ' . $first . "\n";
    echo 'second = ' . $second . "\n";
    echo 'third = ' . $third . "\n\n";

}

пункт = аааа; DUT.A1 E3.3 H2.3 Y3,333 h88.h fdfd.87 J66.H3


name = aaaa

first = DUT.A1
second = E3.3 H2.3 Y3.333 h88.h fdfd.87
третий = J66.H3

item = bbbb; DUT.A2 F2.2 F3.1 Y1.1 J30.A1


name = bbbb
first = DUT.A2
second = F2.2 F3.1 Y1.1
третий = J30.A1

item = cccc; DUT.A3 H2.3 Y3.333 h88.h Y1.1 J45.G2


name = cccc
first = DUT.A3
second = H2.3 Y3.333 h88.h Y1.1
третий = J45.G2

пункт = ха-ха; J1.A1 J1.A2 DUT.A1 DUT.A2 C1.1 C2.1, F2.1 F4.1 K1.1, F2.1 F4.1 K1.1, F2.1 F4.1 K1.1


name = haha ​​
first = DUT.A1 DUT.A2
секунда = C1.1 C2.1, F2.1 F4.1 K1.1, F2.1 F4.1 K1.1, F2.1 F4.1 K1.1
третья = J1.A1 J1.A2
...