В тексте не более 3х повторяющихся символов

Статус
В этой теме нельзя размещать новые ответы.

B0nuse

Постоялец
Регистрация
6 Июн 2009
Сообщения
106
Реакции
21
Прошу помощи в составлении регулярного выражения.
Необходимо принять только то слово, в котором нет повторяющихся более трех раз символов.
Дано:
Код:
a
bb
ccc
dddd
aabb
aaab
ffffe
aabbbcc
aaavvvvcccc
Необходимо получить:
Код:
a
bb
ccc
[S]dddd[/S]
aabb
aaab
[S]ffffe[/S]
aabbbcc
[S]aaavvvvcccc[/S]
и прочие варианты...
 
PHP:
if(preg_match("/[^\s]*?(.)[^\s]*?(\\1)[^\s]*?(\\1)[^\s]*?(\\1)[^\s]*?(\s|\Z)/is",'baabbccb')){
    echo " более трех раз символов.";
    
}else{
   echo " нормально "; 
}
ужас получился, вроде всё нормально, это случайно не задача из собеседования- помнится на харбре её показывали и нормальное решение писали.
 
Спасибо, нет. Не из собеседования.
Но обращаю Ваше внимание на то, что нужна регулярка обратная Вашей.
Допустымые сиволы в слове
Код:
[ \-=_a-zA-Zа-яА-Я0-9\#\[\]\{\}\(\)\@\|\.]
 
Я тоже мозги поломал посидел, возможно одной регуляркой сделать и нельзя. Проще функцию накалякать :) скажем такую:
PHP:
$str = "a
bb
ccc
dddd
aabb
aaab
ffffe
aabbbcc
aaavvvvcccc";

$res = fun($str);
foreach($res as $val)
	echo $val."<br>";



function fun($str){
	$ar = preg_split("/[\r\n]+/", $str);
	$res = array();
	$reg = '/([ \-=_a-zA-Zа-яА-Я0-9\#\[\]\{\}\(\)\@\|\.])(\1{3})/i';

	for($i=0; $i<count($ar); $i++)
		if(!preg_match($reg, $ar[$i]))
			$res[] = $ar[$i];

	return $res;
}
 
Я тоже мозги поломал посидел, возможно одной регуляркой сделать и нельзя. Проще функцию накалякать :) скажем такую:х
проще но как я понял- тз нужно именно регулярку ведь просто поставив отприцание перед if(preg_match("/[^\s]*?(.)[^\s]*?(\\1)[^\s]*?(\\1)[^\s]*?(\\1)[^\s]*?(\s|\Z)/is",'baabbccb')){ можно было получить нужное.
увы после пляски с условными масками и негативным поиском- ничего не дали.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху