Спустя 1 минута, 15 секунд (27.07.2010 - 12:35) linker написал(а):
DedMorozzz
Видимо хотел сказать, сложно понимаемые и медленно работающие алгоритмы?
Видимо хотел сказать, сложно понимаемые и медленно работающие алгоритмы?
Спустя 3 минуты, 51 секунда (27.07.2010 - 12:39) DedMorozzz написал(а):
Отчего же. Я вовсе иные цели преследую. К примеру - отличная зарядка для мозгов. И это при том, что не надобно писать тонны кода. Достаточно пару строк.
Спустя 48 минут, 35 секунд (27.07.2010 - 13:28) ApuktaChehov написал(а):
Могу предложить несложную регулярку на отделения числовых разрядов. К примеру: есть число 6340234.334 нужно из него сделать: 6 340 234.334
Спустя 1 минута, 11 секунд (27.07.2010 - 13:29) linker написал(а):
ApuktaChehov
Есть уже готовая функция в PHP
Есть уже готовая функция в PHP
Спустя 1 минута, 3 секунды (27.07.2010 - 13:30) ApuktaChehov написал(а):
Какая разница есть или нет. На регулярках это нежно реализовать. Вот ты знаешь как это сделать? Я нет
Спустя 56 минут, 58 секунд (27.07.2010 - 14:27) DedMorozzz написал(а):
ага, увидал. Ну походу зедесь лишь через цикл. Как-то так:
$a="6340234.334";
do{
$b=$a;
$a=preg_replace('#([0-9]+)([0-9]{3})( ?\.?[0-9]*)#','$1 $2$3',$a);
}
while($b!=$a);
echo $a;//6 340 234.334
Спустя 8 минут, 36 секунд (27.07.2010 - 14:35) Wird_34 написал(а):
А почему именно регулярные выражения? Думаю мозг можно размять например классическими задачами по программированию вроде ханойских башен, обедающих философов, двух генералов и других. Вроде как PHP-программисты их не прорешивают и мне кажется, что зря.
Спустя 2 часа, 20 минут, 21 секунда (27.07.2010 - 16:56) ApuktaChehov написал(а):
Не, не через цикл. Я книгу читал, там пример есть как на чистых регулярках это сделать. Там используется опережающая проверка.
Если интересно, могу дома порыться
Если интересно, могу дома порыться
Спустя 3 минуты, 39 секунд (27.07.2010 - 16:59) DedMorozzz написал(а):
без цикла...ок, подумаю. Вот это уже интересней. Ибо на решение ЭТОЙ задачи ушло минут 10)
Спустя 1 минута, 56 секунд (27.07.2010 - 17:01) ApuktaChehov написал(а):
Кстати, там пример реализации для любых чисел. А тут как я понял, конкретно под мою цифру.
Спустя 1 минута, 27 секунд (27.07.2010 - 17:03) DedMorozzz написал(а):
нет. Тут под любую )) Зачем тока под 1
Спустя 31 секунда (27.07.2010 - 17:03) Joker написал(а):
напиши регулярку на извлечения телефонов сотовый домашних из текста я так учился...
Спустя 2 минуты, 25 секунд (27.07.2010 - 17:06) DedMorozzz написал(а):
Учиться? С регулярками у меня всё отлично) Хотя всегда есть чему учиться. Но у них отличные алгоритмы, чем они и привлекают. Твоя задача достаточно проста, и как следствие - мало интересна
Спустя 2 часа, 38 минут, 27 секунд (27.07.2010 - 19:44) ApuktaChehov написал(а):
Вот еще задачка. Тут уже было что подобное, но цель была другая.
Значит есть строка:
У {попа|отца|деда} была {собака|кошка|лошадь} он ее {любил|ненавидел|призерал}, она съела кусок {мяса|хлеба} он ее убил.
Нужно с помощью регулярного выражения разбить это строку. Вертикальная черта должна оставаться. Фактически нужно разбить строку на подстроки, так чтобы получился массив со значениями вне фигурных скобок и внутри фигурных скобок.
Поулчится что то:
$arr[0] => 'У ',
$arr[1] => 'попа|отца|деда' и так далее.
P.S. У меня случайно получилось так это реализовать. Но теперь удобно работать, так как у нас отдельно строка и отдельно варианты выбора через |.
Значит есть строка:
У {попа|отца|деда} была {собака|кошка|лошадь} он ее {любил|ненавидел|призерал}, она съела кусок {мяса|хлеба} он ее убил.
Нужно с помощью регулярного выражения разбить это строку. Вертикальная черта должна оставаться. Фактически нужно разбить строку на подстроки, так чтобы получился массив со значениями вне фигурных скобок и внутри фигурных скобок.
Поулчится что то:
$arr[0] => 'У ',
$arr[1] => 'попа|отца|деда' и так далее.
P.S. У меня случайно получилось так это реализовать. Но теперь удобно работать, так как у нас отдельно строка и отдельно варианты выбора через |.
Спустя 39 минут, 38 секунд (27.07.2010 - 20:24) Reflex написал(а):
define('REGEXP', '#(?<={)(.*?)(?=})|(?<=})(.*?)(?={)|^(.*?)(?={)|(?<=})(.*?)$#');
$data = 'У {попа|отца|деда} была {собака|кошка|лошадь} он ее {любил|ненавидел|призерал}, она съела кусок {мяса|хлеба} он ее убил.';
preg_match_all(REGEXP, $data, $matches);
print_r($matches[0]);
Array
(
[0] => У
[1] => попа|отца|деда
[2] => была
[3] => собака|кошка|лошадь
[4] => он ее
[5] => любил|ненавидел|призерал
[6] => , она съела кусок
[7] => мяса|хлеба
[8] => он ее убил.
)
Отдельное спасибо DedMorozzz'у, от которого я узнал про просмотр назад и вперёд.
Спустя 1 час, 18 минут, 32 секунды (27.07.2010 - 21:42) ApuktaChehov написал(а):
Вот я нашел свою старую реализацию. Она немного отличается от той что я тут задал, но все же выложу:
результат:
P.S. Дедушка мороззз, жду от тебя вариант про циферки =)
$data = 'У {попа|отца|деда} была {собака|кошка|лошадь} он ее {любил|ненавидел|призерал}, она съела кусок {мяса|хлеба} он ее убил.';
preg_match_all('/([^{]*){([^}]*)}/', $data, $arr);
результат:
[1] => Array
(
[0] => У
[1] => была
[2] => он ее
[3] => , она съела кусок
)
[2] => Array
(
[0] => попа|отца|деда
[1] => собака|кошка|лошадь
[2] => любил|ненавидел|призерал
[3] => мяса|хлеба
)
P.S. Дедушка мороззз, жду от тебя вариант про циферки =)
Спустя 17 минут, 54 секунды (27.07.2010 - 22:00) DedMorozzz написал(а):
Да-да, завтра кину. Думаю будет время.
Спустя 15 часов, 52 минуты, 12 секунд (28.07.2010 - 13:52) DedMorozzz написал(а):
ApuktaChehov - лови, 1й регуляркой:
Цикл выглядит, как минимум - эстетичнее (: Но зато тут логика попроще будет, хотя сама реализация - существенно сложнее.
$a="6341214564654615361187210967.334";
$a=preg_replace_callback('#([0-9]+)(?=(\ |\.))#',create_function('$matches','
$long = strlen($matches[0]);
$b=(int)($long/3);
$res=$long-$b*3;
$d=substr_replace($matches[0],\'\',0,$res);
$ost=substr_replace($matches[0],\'\',$res);
$c=preg_replace(\'#([0-9]{3})#\',\' $1\',$d);
$c=$ost. $c;
return($c);'),$a);
echo $a;//6 341 214 564 654 615 361 187 210 967.334
Цикл выглядит, как минимум - эстетичнее (: Но зато тут логика попроще будет, хотя сама реализация - существенно сложнее.
Спустя 2 часа, 50 минут, 45 секунд (28.07.2010 - 16:43) ApuktaChehov написал(а):
Жесть А бы до такого никогда бы не додумался. Ты гений
Вечером в книге посмотрю, как там это сделано. Там именно одно регулярное выражение.
Вечером в книге посмотрю, как там это сделано. Там именно одно регулярное выражение.
Спустя 9 минут, 31 секунда (28.07.2010 - 16:53) DedMorozzz написал(а):
В принципе работать должно быстрее чем в цикле и даже быстрее любого иного решения Поскольку сперва выгребается всё по очень простому условию, далее собраный результат обрабатываеться строковыми ф-ями. И обработаный результа снова таки по очень простому шаблону(проще в принципе никак ) заменяется
Спустя 2 минуты, 13 секунд (28.07.2010 - 16:55) ApuktaChehov написал(а):
Алгоритм я понял твой. Но реализация меня удивила. Очень эффектно!
Спустя 6 минут, 31 секунда (28.07.2010 - 17:01) DedMorozzz написал(а):
Тема актуальна...
Если у кого-то будут какие-либо предложения - рассмотрю
Если у кого-то будут какие-либо предложения - рассмотрю
Спустя 2 часа, 3 минуты, 42 секунды (28.07.2010 - 19:05) ApuktaChehov написал(а):
Во, нашел выражение:
P.S. Я его немного доработал. Что бы оно так же корректно работало с возможной дробной частью.
Глядя на такую красоту, завидую тем, кто отлично ладит с регулярками.
$data = '32345432411,123';
echo( preg_replace("/(?<=\d)(?=(\d\d\d([,.][0-9]*)?)+$)/", ' ', $data) );
P.S. Я его немного доработал. Что бы оно так же корректно работало с возможной дробной частью.
Глядя на такую красоту, завидую тем, кто отлично ладит с регулярками.
Спустя 29 минут, 9 секунд (28.07.2010 - 19:34) DedMorozzz написал(а):
Да, намного красивее
Ну а что касаеться скорости - завтра мб проверю. Гляну что быстрее
Ну а что касаеться скорости - завтра мб проверю. Гляну что быстрее
Спустя 17 часов, 31 минута, 44 секунды (29.07.2010 - 13:06) DedMorozzz написал(а):
Вот это да!!! Даже не ожидал такого:
Мой алгоритм - time: 0.00633383 s
Алгоритм в книге - time: 4.46954417 s
1й алгоритм быстрее 2го в 705,66216175678854658239959076893 раза
строку на проверку -
Вывод: в программировании фраза "Красота спасёт мир", как минимум - не уместна
ЗЫ:Бог Книга vs DedMorozzz - 0:1
Мой алгоритм - time: 0.00633383 s
Алгоритм в книге - time: 4.46954417 s
1й алгоритм быстрее 2го в 705,66216175678854658239959076893 раза
строку на проверку -
Свернутый текст
"323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411323454123213213213123131111111111111818181818273891365476834532411.123"
Вывод: в программировании фраза "Красота спасёт мир", как минимум - не уместна
ЗЫ:
Спустя 1 месяц, 1 день, 23 часа, 23 минуты, 56 секунд (31.08.2010 - 12:30) DedMorozzz написал(а):
Продолжение банкета.
Интересная задачка: "Проверить строку на уникальность. Т.е. что бы не один символ не повторялся".
Код:
или вариант по проще:
Интересная задачка: "Проверить строку на уникальность. Т.е. что бы не один символ не повторялся".
Код:
$user_text = 'asskxlzxpa';
$Unique_content = preg_replace_callback('#(.*)#',create_function('$matches','
$a = $matches[0];
$len = strlen($a);
$err = \'\';
for($i=0;$i<$len;$i++){
$end_len = $len-$i;
for($j=0;$j<$end_len;$j++){
if(!preg_match(\'#^.{\'.$i.\'}(\'.$a[$i].\').{\'.$j.\'}(?!\\1)#\',$a))
$err.= \'Position - \'.($i+1).\' and \'.($i+$j+2).\'. Symbol - "\'.$a[$i].\'"<br />\';
}
}
if (empty($err)) return \'All Good!\';
else return \'Recurrence found!<br />\'.$err;
'),$user_text,1);
echo $Unique_content;
или вариант по проще:
$user_text = 'askxslzp';
if(preg_match('#(.).*?\\1#',$user_text)) echo "Recurrence found!";
else echo "All Good!";
Спустя 23 дня, 21 час, 46 минут, 47 секунд (25.09.2010 - 10:17) RockBoy написал(а):
DedMorozzz
скажи как скорость регулярки затестить?
скажи как скорость регулярки затестить?
Спустя 5 часов, 26 минут, 7 секунд (25.09.2010 - 15:43) DedMorozzz написал(а):
microtime() до и после регулярки. И вычитай. Из большего - меньшее. Разница - время выполнения.
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться