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

Тема в разделе "PHP", создана пользователем Levitt, 21 апр 2012.

Модераторы: latteo
  1. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Подскажите как с помощью регулярки удалить все строки из файла с вхождением латинских символов?
     
  2. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Указываем явно только нужные буквы. Удаляем всё, кроме нужных:

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

    // или, если всё в кодировке UTF-8, добавить модификатор u
    $result = preg_replace('/[^a-zа-яё]+/iu', '', $text);
     
  3. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Вот код, который меня удовлетворяет
    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]) );
            }
        }
    ?>
     
  4. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    174
    Симпатии:
    107
    Неправда. Это решение не работает. Или это такой метод набора постов?
    Этим решением ты добавляешь в конец файла не английские строки, и это раз, второе, зачем так насиловать файловую систему?, третье, данное решение будет гиблым для больших файлов, так как предпочтительнее считывать файл построчно.
    Вот приблизительный пример резализации:
    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);
              }
           
          }
     
      }
     
    }
     
    ?>
     
    latteo нравится это.