проблемка с регулярным выражением

Pavel_ace

Guest
проблемка с регулярным выражением

Есть файл test.ape:
90-012-B 897019902100524452 9031055949
90-012-B 897019902100524453 9031055969
90-012-B 897019902100524454 9031055998
90-012-B 897019902100524455 9031056232

из столбцов нужно выдрать записи.
Выдираю их по одной кодом:
PHP:
<?php
$lines = file('test.APE');
foreach ($lines as $line_num => $line) {

ereg("([a-zA-Z0-9-]{3,10})",$text,$reg);
print "Запись 1 $reg[0]"."<br>";

ereg("([8]+[0-9]{17,18})",$text,$reg);
print "Запись 2 $reg[0]"."<br>";

ereg("(90+[0-9]{7,8})",$text,$reg);
print "Запись 3 $reg[0]"."<br>";

}
?>
Но почему-то не получается все это сделать одной строкой,

PHP:
<?php
$lines = file('test.APE');
foreach ($lines as $line_num => $line) {

ereg("([a-zA-Z0-9-]{3,10})(\s+)([8]+[0-9]{17,18})(\s+)(90+[0-9]{7,8})",$text,$reg);
print "$reg[0]-$reg[1]-$reg[2]]"."<br>";

}
?>
что не так ?
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Зачем так сложно?
Нельзя ли просто сделать fgetcsv?
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
а насчет регулярки, зачем ты (\s+) в скобках пишешь?
 

Pavel_ace

Guest
пытаюсь учесть пробел между записями
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Ну тогда в $reg[1] должен получиться пробел, потому что $reg[1] соответствует скобке номер 2 в регулярном выражении

и что за переменная $text?

http://ru3.php.net/fgetcsv
 

Pavel_ace

Guest
сорри, вот так
PHP:
<?php 
$lines = file('test.APE'); 
foreach ($lines as $line_num => $line) { 

ereg("([a-zA-Z0-9-]{3,10})(\s+)([8]+[0-9]{17,18})(\s+)(90+[0-9]{7,8})",$line,$reg); 
print "$reg[0]-$reg[3]-$reg[5]]"."<br>"; 

} 
?>
но все равно проблема та же
 

vvv

Guest
Pavel_ace

А split'ом не пробовал и без всяких регекспов....

PHP:
$lines = file('test.APE');
foreach ($lines as $line_num => $line) { 
 $reg = split(' ',$line)
}
 

Pavel_ace

Guest
Даже если использовать CVS,
то что мне в качестве разделителя использовать?
Пробел не катит ((
PHP:
<?php
$row = 1;
$handle = fopen("test.ape", "r");
while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
   $num = count($data);
   echo "<p> $num Полей в строке $row: <br /></p>\n";
   $row++;
   for ($c=0; $c < $num; $c++) {
       echo $data[$c] . "<br />\n";
   }
}
fclose($handle);
?>
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
[[:space:]]+ вместо \s+
или preg_match("/.../") вместо ereg
 

Pavel_ace

Guest
И Сплитом не хочет,пробел не катит в качестве разделителя
PHP:
<?
$lines = file('test.APE');
foreach ($lines as $line_num => $line) {
$reg = split(' ',$line);
print "$reg[0]-$reg[1]-$reg[2]-$reg[3]-$reg[4]-$reg[5]"."<br>";
}
?>
результат:
90-012-B 897019902100524452 9031055949 -----
90-012-B 897019902100524453 9031055969 -----
90-012-B 897019902100524454 9031055998 -----
90-012-B 897019902100524455 9031056232 -----
90-012-B 897019902100524456 9031056474 -----
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
а лучше всего preg_split("/\s+/", $line)
раз уж пробел не катит
 
Сверху