PHP: удалить из строки текста все лишние разделители...
... то есть, любые лишние пробелы (в начале, конце, между словами) и дублирующиеся слова, возможно, написанные в разных регистрах. По-моему, вариантов немало, например, самый простой таков: напишем метод trimall()
, удаляющий лишние пробелы между словами, затем метод trimrepeats()
исключит из строки лишние слова:
$s=trimrepeats(trimall($s));
Коды функций:
function trimall($string) { return trim(preg_replace("/ +/"," ",$string)); } function trimrepeats($string) { $k = split(' ', $string); $n = count($k); for ($i=0; $i<$n; $i++) $k[$i]=strlow($k[$i]); return implode(' ', array_unique ($k)); } function strlow ($s) { $up='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ'; $low='абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz'; $l=strlen($s); $s2=''; for ($i=0; $i<$l; $i++) { $p=strpos($up,$s[$i]); if (is_integer($p)) $s2 .= $low[$p]; else $s2 .= $s[$i]; } return $s2; }
Последняя функция понадобилась, чтоб не зависеть от установленного в среде метода сравнения строк, на самом деле этот метод часто можно установить системной директивой. Ну и вообще, можно всё одним регулярным выражением сделать:
function trimall ($string) { return preg_replace("/(^\s*)|(\s*$)/","", preg_replace("/\s+/"," ",trim($string))); }
Здесь удалятся и лишние переводы строк в том числе.
04.02.2011, 12:19 [12914 просмотров]