Главная страница
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.01 c
15-1255000858
defen
2009-10-08 15:20
2009.12.06
Подключение и работа с SQL базой


15-1254768851
freeman1
2009-10-05 22:54
2009.12.06
Устроство подключено


3-1231164216
zorik
2009-01-05 17:03
2009.12.06
Invalid cursor declaration


15-1254746040
XXL
2009-10-05 16:34
2009.12.06
Что случилось с оборудованием от AMD ?


15-1254842298
Alkid
2009-10-06 19:18
2009.12.06
Самодурствующее начальство