БлогNot. PHP: удалить из строки текста все лишние разделители...

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 [12817 просмотров]


теги: php алгоритм

К этой статье пока нет комментариев, Ваш будет первым