Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление лишнего
 
 автор: Enjoy   (05.06.2007 в 18:35)   письмо автору
 
 

Здравствуйте!

Мне нужно из строки удалить все слова, включающие в себя любые символы, за исключением символов латинского алфавита ('[^a-z]+'i); все слова, длиннее 15 символов; все слова, короче 3-х символов; все html-теги, java-скрипты, стиль (между тегами <style *></style>, включая сами теги); оставить между словами только один пробел (вместо нескольких пробелов, символов табуляции и перевода строки).

Помогите пожалуйста составить правильное регулярное выражение.

Вот, что есть у меня:



$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезает javaScript
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезает HTML-теги
                 "'[^a-z\r\n\s]+'i",// Вырезает все, кроме букв латинского алфавита, пробелов и символов перевода строки
                 "'[a-z]{15,}'i",//Вырезает все длинные слова
                 "'([\r\n])[\s]+'",                 // Вырезает пробельные символы
                 "'&(quot|#34);'i",                 // Заменяет HTML-сущности
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");                    // интерпретировать как php-код

$replace = array ("",
                  "",
                  "",
                   "",
                   "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");
$text = preg_replace( $search, $replace, $s['body'] );
$text = strtolower( $text );


Есть еще одна задача: Из строки нужно извлечь e-mail, следующий за словом "e-mail: ", и дату, следующую за словом "paid-till: ".

Заранее благодарен.

   
 
 автор: mr Bin   (05.06.2007 в 21:15)   письмо автору
 
   для: Enjoy   (05.06.2007 в 18:35)
 

Пипец :) Есть герои?

   
 
 автор: Trianon   (05.06.2007 в 21:36)   письмо автору
 
   для: Enjoy   (05.06.2007 в 18:35)
 

Может проще сразу всю строку грохнуть?

   
 
 автор: sms-send   (06.06.2007 в 01:38)   письмо автору
 
   для: Trianon   (05.06.2007 в 21:36)
 

<?php
$search 
= array ("'<script[^>]*?>.*?</script>'si",  // Вырезает javaScript
                 
'~<style[^>]*>.*?</style>~si',
                 
"'<[\/\!]*?[^<>]*?>'si",           // Вырезает HTML-теги
                 
"'[^a-z\r\n\s]+'i",// Вырезает все, кроме букв латинского алфавита, пробелов и символов перевода строки
                 
"'&(quot|#34);'i",                 // Заменяет HTML-сущности
                 
"'&(amp|#38);'i",
                 
"'&(lt|#60);'i",
                 
"'&(gt|#62);'i",
                 
"'&(nbsp|#160);'i",
                 
"'&(iexcl|#161);'i",
                 
"'&(cent|#162);'i",
                 
"'&(pound|#163);'i",
                 
"'&(copy|#169);'i",
                 
"'&#(\d+);'e",                    // интерпретировать как php-код
                 
'~\b(?:\w*?[^a-z\s]\w*?|\w{1,2}|\w{16,})\b~i',
                 
'~\s+~');

$replace = array ("",
                  
"",
                  
"",
                  
"",
                  
"\"",
                  
"&",
                  
"<",
                  
">",
                  
" ",
                  
chr(161),
                  
chr(162),
                  
chr(163),
                  
chr(169),
                  
"chr(\\1)",
                  
'',
                  
' ');
$text preg_replace$search$replace$s['body'] );
$text strtolower$text );
?>

   
 
 автор: Enjoy   (06.06.2007 в 07:20)   письмо автору
 
   для: sms-send   (06.06.2007 в 01:38)
 

Большое спасибо!

Сделав небольшие преобразования, вот что я получил:


<?PHP
    
function parse_text($s)
    {
        
$search = array ("/ <script [^>]*?> .*? </script> /six",  // Вырезает javaScript
                         
"/ <style[^>]*> .*? </style> /six"// Вырезает стиль
                         
"/ <[\/\!]*?[^<>]*?> /six",           // Вырезает HTML-теги
                         
"/[^a-z\r\n\s]+/i"// Вырезает все, кроме букв латинского алфавита и пробельных символов
                         
"/\b (?: \w*?[^a-z\s]\w*? | \w{1,2} | \w{16,}) \b/ix"// Вырезает все слова, короче 3-х символов и все слова, длиннее 15
                         
"/( [\r\n\s] | [&(nbsp|#160);] )+/x"// Заменяет все пробельные символы на один пробел
                         
"/&#(\d+);e/");                    // Интерпретировать как php-код
                         
        
        
$replace = array ("",
                          
"",
                          
"",
                          
"",
                          
"",
                          
" ",
                          
"chr(\\1)");
        
$text preg_replace$search$replace$s );
        
$text strtolower$text );
        return 
$text;
    }
    
    
$word_string parse_text$page );
    echo 
$word_string;
?>


Я все правильно сделал?

Что означает [^>] в запросе на удаление стиля и JavaScript?

Разъясните пожалуйста, в этом запросе: ~\b(?:\w*?[^a-z\s]\w*?|\w{1,2}|\w{16,})\b~
Что означает выражение "\w*?"?

Интерпретатор говорит мне, что Unknown modifier 'c' и 't'. Из-за чего возникает такая проблема?


Буду очень благодарен за ответы на мои вопросы.

   
 
 автор: Enjoy   (06.06.2007 в 16:17)   письмо автору
 
   для: Enjoy   (06.06.2007 в 07:20)
 

Разобрался, всем спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования