|
|
|
| Здравствуйте!
Мне нужно из строки удалить все слова, включающие в себя любые символы, за исключением символов латинского алфавита ('[^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: ".
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Enjoy
(05.06.2007 в 18:35)
| | Пипец :) Есть герои? | |
|
|
|
|
|
|
|
для: Enjoy
(05.06.2007 в 18:35)
| | Может проще сразу всю строку грохнуть? | |
|
|
|
|
|
|
|
для: 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 );
?>
|
| |
|
|
|
|
|
|
|
для: 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 в 07:20)
| | Разобрался, всем спасибо! | |
|
|
|
|