удалить строки с латиницей

Levitt

Профессор
Регистрация
20 Май 2008
Сообщения
361
Реакции
43
Подскажите как с помощью регулярки удалить все строки из файла с вхождением латинских символов?
 
  • Заблокирован
  • #2
Указываем явно только нужные буквы. Удаляем всё, кроме нужных:

// если всё в кодировке windows-1251
$result = preg_replace('/[^a-zа-яё]+/i', '', $text);

// или, если всё в кодировке UTF-8, добавить модификатор u
$result = preg_replace('/[^a-zа-яё]+/iu', '', $text);
 
Вот код, который меня удовлетворяет
PHP:
<?
$file_array = file('strings.txt');
for($i = 0; $i < count($file_array); $i++)
    {
    if ( !preg_match ('/[a-z]+/iu',$file_array[$i]) )
        {
        file_put_contents( 'nonlatin.txt',@file_get_contents('nonlatin.txt')."\r\n".trim($file_array[$i]) );
        }
    }
?>
 
Вот код, который меня удовлетворяет
PHP:
<?
$file_array = file('strings.txt');
for($i = 0; $i < count($file_array); $i++)
    {
    if ( !preg_match ('/[a-z]+/iu',$file_array[$i]) )
        {
        file_put_contents( 'nonlatin.txt',@file_get_contents('nonlatin.txt')."\r\n".trim($file_array[$i]) );
        }
    }
?>
Неправда. Это решение не работает. Или это такой метод набора постов?
Этим решением ты добавляешь в конец файла не английские строки, и это раз, второе, зачем так насиловать файловую систему?, третье, данное решение будет гиблым для больших файлов, так как предпочтительнее считывать файл построчно.
Вот приблизительный пример резализации:
PHP:
<?php
 
$file_to_work = 'strings.txt';
 
if(is_file($file_to_work) && is_readeable($file_to_work) && filesize($file_to_work)){
 
  $fp = fopen($file_to_work,'r');
 
  if($fp && is_resource($fp)){
        flock($fp,LOCK_EX);
 
        $content = '';
     
        $line = false;
   
      while(($line = fgets($fp)) !== false){
       
          if(!preg_match('~[a-z]~iu',$line)){
           
              $content .= $line."\n";
           
          }
       
      }
   
      flock($fp,LOCK_UN);
      fclose($fp);
   
      if(!empty($content)){
          $fp = fopen($file_to_work,'w+');
          if($fp && is_resource($fp)){
              flock($fp,LOCK_EX);
              fwrite($fp,$content);
              flock($fp,LOCK_UN);
              fclose($fp);
          }
       
      }
 
  }
 
}
 
?>
 
Назад
Сверху