Как мога да филтрирам и изтрия ненужни редове?

Ticketa

Registered
Привет,
Имам следния формат на текстове:

1234567890, asd, asd, 1234567890
123456, asd, gfd, 1234567890
6754342, asd, gdg, 1234567890
123456789, grkgg, dsfdsfds, 1234567890
175645454, fggfd, rfgggffdgdggf, 1234567890

Данните всичките са на нов ред. Искам да проверя първия стринг дали отговаря на дължина от - до 9 символа и когато пуска кода, да се изтрива всичко не нужно. В случая горния пример да стане:

123456789, grkgg, dsfdsfds, 1234567890
175645454, fggfd, rfgggffdgdggf, 1234567890

Предполагам, че само с preg_match и preg_replace, ще стане, но за момента не успях

Пробвах и така:
Код:
<?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

$string="
1234567890, asd, asd
123456, asd, gfd
6754342, asd, gdg
123456789, grkgg, dsfdsfds
175645454, fggfd, rfgggffdgdggf";
$string = nl2br($string);
echo $string;
echo "<hr/>";
$rows = explode("\n",$string);
$unwanted = "\d{10},";
$cleanArray= preg_grep("/$unwanted/i",$rows,PREG_GREP_INVERT);
$cleanString=implode("\n",$cleanArray);
print_r ( $cleanString );

И ми върши работа, но това правилен ли начин е? Така изтривам само цифрите с над 10 знака. И............не проверявам само първия стринг, ами целия текст, което е пречка, защото след първия стринг, също мога да имам 10 символа и трябва да си останат.
 
За самия регекс виж например https://regex101.com/r/MZK9zZ/1
"^" в началото означава, че търсиш от началото на стринга, а не в целия. (стринг = line, след като си разделил текста по \n)
Говориш за знаци, но в твоя регекс проверяваш само за цифри - това също е важно.

А за това дали е правилно - зависи колко е голям файла и дали имаш ограничения по памет...

И защо добавяш html тагове преди обработката (nl2br)?
 
Аз не бих използвал регулярни изрази за обработка на структуриран файл, особено ако файла се очаква да е голям.

Знаеш, че файла ти е разделен със запетаи и (очевидно) ще искаш да провериш само първия сегмент, така че те съветвам да си изчетеш файла като нормалните хора ред по ред и да го обработиш.

Ако знаеш, че файла ще е голям е най-добре да използваш даже генератори, за да предотвратиш използване на повече РАМ отколкото си заделил за PHP.
 
Код:
<?php
$csv = '1234567890, asd, asd, 1234567890
123456, asd, gfd, 1234567890
6754342, asd, gdg, 1234567890
123456789, grkgg, dsfdsfds, 1234567890
175645454, fggfd, rfgggffdgdggf, 1234567890';

$rows = explode("\n", $csv);
$new  = '';

foreach ($rows as $key => $row) {
  $cell = strtok($row, ',');
  if (strlen($cell) == 9) {
    $new .= $row;
  }
}

echo "<hr>";
echo nl2br($csv);
echo "<hr>";
echo nl2br($new);

от това по просто не се сещам
 
Попринцп може и директно така, ако си сигурен, че структурата на редовете ти винаги е такава :D

Код:
 if ($row[9] == ',') {
    $new .= $row;
  }
 

Горе