Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

Регэксп   Найти похожие ветки 

 
Kerk ©   (2009-10-07 16:20) [0]

Товарищи, можно ли регэкспом проверить строку на то, что она состоит больше, чем из N разных символов? Ничего в голову не приходит что-то.


 
Kolan ©   (2009-10-07 16:41) [1]

Почему-то мне кажется, что циклом быстрее будет по всем параметрам.


 
TUser ©   (2009-10-07 16:48) [2]

В смысле? Что символов больше N и все они различны или что всего разных символов там больше N?

В первом случае - отсортируй их. Во втором, - тоже :)


 
TUser ©   (2009-10-07 16:53) [3]

ой, регэксп :)


 
Kerk ©   (2009-10-07 16:55) [4]


> TUser ©   (07.10.09 16:48) [2]
> В смысле? Что символов больше N и все они различны или что
> всего разных символов там больше N?

Общее число символов мне без разницы. Мне интересно сколько в этой строке разных символов. Например, в "мама мыла раму" 7 разных символов, включая пробел.


 
KSergey ©   (2009-10-07 16:57) [5]

регексп спицально придумал для сложного стандартного решения простых задач.
Я это давно заметил.


 
clickmaker ©   (2009-10-07 17:01) [6]

массив из 256 элементов. Индекс - код символа.
Идем по строке, выбирая символы. Если ячейка массива пуста - символ новый, увеличиваем счетчик.


 
Медвежонок Пятачок ©   (2009-10-07 17:11) [7]

var InStr : string;
begin
InStr := "Скока же здеся разных символов и не очень разных?";
with TRegExpr.Create do
 try
  Expression := "(.).*\1";
  while (Length(InStr) > 0) and Exec(InStr) do InStr := ReplaceRegExpr(Match[1],InStr,"");
  ShowMessage(Format("А вот скока %d",[Length(InStr)]));
 finally
  Free;
 end;


 
Медвежонок Пятачок ©   (2009-10-07 17:22) [8]

регексп спицально придумал для сложного стандартного решения простых задач.

регексп спицально придуман для простого решения самых разных по сложности задач.


 
McSimm ©   (2009-10-07 17:29) [9]


> проверить строку на то, что она состоит больше, чем из N
> разных символов?


/(.).*([^\1]).*([^\1\2]).*([^\1\2\3]).*([^\1\2\3\4]).*([^\1\2\3\4\5]).*([^\1\2\3\ 4\6]).*([^\1\2\3\4\5\6\7]).*/

:)


 
Kerk ©   (2009-10-07 17:33) [10]

В общем, в итоге я сделал так

 $count = 0;

 while (mb_strlen($c) > 0)
 {
   $c = mb_eregi_replace(mb_substr($c,0,1), "", $c);
   $count++;
 }


 
test ©   (2009-10-07 21:18) [11]

Kerk ©   (07.10.09 16:20)  
[A-Za-z ]{10}
Только 10 символов с пробелами на латинице.



Страницы: 1 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1254977768
stas
2009-10-08 08:56
2009.12.06
Не включается комп


1-1211016204
max1991
2008-05-17 13:23
2009.12.06
Имя заголовка колонки у Cross в FastReport


3-1231075733
Oleg_teacher
2009-01-04 16:28
2009.12.06
Clientdatase + рисунок


15-1254741346
megamuz
2009-10-05 15:15
2009.12.06
Проследить за процессом


2-1255580012
uno-84
2009-10-15 08:13
2009.12.06
Создание файла .DBF нужной версии