Получение случайной строки и регулярное выражение

SViN

Новичок
Получение случайной строки и регулярное выражение

1) Просветите, пожалуйста, о возможности получения случайной строки (по типу генерирования пароля)

2) как выделить(получить) с помощью регулярных выражений текст между <body> и </body> в html файле?
 

WP

^_^
lucas
Что неправильно? Зачем md5? microtime? Ты знаешь сколько действий в md5?
 

kost

Новичок
WP
> Ты знаешь сколько действий в md5?
имхо спор ни о чем. Все равно что вытягивать содержание body без регулярок
...а ты знаешь сколько действий preg_match...

lucas
> Неправильно

Если поправите, поправьте (во благо развития) также и чувака, который в комменты к rand() написал ф-цию для rand'омной строки. А то ведь люди ведутся... :)))
 

WP

^_^
kost
> имхо спор ни о чем. Все равно что вытягивать содержание body без регулярок
Ошибаешься.
> ...а ты знаешь сколько действий preg_match...
Знаю. Ты мне предложи вариант быстрее чем preg_match.
 

lucas

Новичок
kost

В этой теме помогают конкретному человеку.
Так что флейм можно не разводить.

WP

Дело не в том, "сколько действий в md5", а в том, как сделать правильно.

Развернутый пример:

Ты мне предложи вариант быстрее чем preg_match.
Пожалуйста:

1) PCRE (56.218 секунд):

PHP:
preg_match('~<body>(.*)</body>~si',$string,$matches) ;
2) String (55.375):

PHP:
$start = strpos($string,'<body>') + 6 ;
substr($string,$start,strpos($string,'</body>') - $start) ;
Тестировалось на коде этой страницы форума.
ПО: WinXP OEM SP2, Apache 1.3.33, PHP 5.1.4 (CGI), ApacheBench 1.3c (1000 запросов).
Компьютер: AMD Athlon X2 3800+ (загрузка: ~30% и ~80%), RAM 2x512 MB.

Тестировать все это на 10000 запросов времени не имею.
В этом нет никакого смысла.

Выводы (слушаем внимательно, WP):

Важно всегда применять годные средства.
Для поиска в строках по сложным условиям применяем регэкспы.
Для генерирования "случайной строки (по типу генерирования пароля)" применяем функции для получения случайных строк, а не случайных чисел.

Нужно идти от цели к реализации (TDD? :)), а не подгонять требования под имеющиеся средства.
Ведь, надеюсь, никто не сомневается, что в основе rand лежит банальный microtime?

Вот так.
 

WP

^_^
lucas
Ты хочешь сказать что примеры 1 и 2 равносильны? <bOdY>blablabla</body>. Не говоря уже о том как вариант 2 обработает <body>blablabla</body></body>.

> В этом нет никакого смысла.
Угу, для начала нужно было написать равносильный пример)

> Важно всегда применять годные средства.
Применять нужно средства которые подходят по смыслу и несут лишних действий.

> Нужно идти от цели к реализации (TDD? ), а не подгонять требования под имеющиеся средства.
Я не люблю TDD, но это оффтоп. Я считаю что писать нужно рационально, а не через ж. Есть задача получить n случайных символов (элементов) из заданого множества.
PHP:
function chr_gen($chars,$len)
{
 if (!strlen($chars) or !is_numeric($len)) {return FALSE;}
 $result = '';
 $l = strlen($chars)-1;
 for($i = 0; $i < $len; $i++) {$result .= $chars{rand(0,$l)};}
 return $result;
}
Эта функция обонит любой другой вариант со всякими хешовыми извращениями.

Кстати, да будет тебе известно, md5 это ничто иное как hex, ведь он состоит из 0-9a-f, а не a-z.

Вот так.
 

lucas

Новичок
WP

Сев в лужу (rand), не нужно пытаться найти себе оправдания.
Это выглядит смешно в свете того, что откровенно притянуто за уши.

Не нужно пытаться указать на недостатки решения, использующего строковые функции, тем более, что самый главный недостаток ты упустил из виду.
Ты попросил решение данной конкретной задачи, не уступающее регэкспам по скорости. Тебе его продемонстрировали. Точка.

Не нужно пересказывать мне мануал.
Он таки в свободном доступе.

Не нужно постить никаких функций, решающих задачу "получить n случайных символов (элементов) из заданого множества".
Нужно было подумать головой в момент написания своего первого поста.

В дальнейшем на твои оправдания отвечать не намерен.
 

WP

^_^
lucas
Я не садился в лужу. Все здравомыслящие люди используют rand() или array_rand() для генерации псевдослучайных строк. И это не притянуто за уши, а самый верный, и быстрый вариант. Слушай, а давай еще sha1 поюзаем тогда, раз такая пьянка, или вообще strrev(sha1(md5(crc32(microtime())))).
Не нужно пытаться указать на недостатки решения, использующего строковые функции, тем более, что самый главный недостаток ты упустил из виду.
Кроме скорости у реального РЕШЕНИЯ нет недостатков перед регулярками по определению. Но ты же решения не предоставил.
> Ты попросил решение данной конкретной задачи, не уступающее регэкспам по скорости. Тебе его продемонстрировали. Точка.
Я попросил код который равносилен тому коду (с preg_match) и не уступает ему по скорости. Этого я не получил.
> Не нужно пересказывать мне мануал.
> Он таки в свободном доступе.
Т.е. ты считаешь что случайный пароль должен состоять лишь из a-f0-9? Если так то пациент скорее мертв чем жив.
> Нужно было подумать головой в момент написания своего первого поста.
Я подумал, и написал, а ты видно нет.

> В дальнейшем на твои оправдания отвечать не намерен.
Я бы тебе сказал, но материться тут не хочу. Это не оправдание а указание на недостатки обоих твоих решений.
 

spe

Новичок
Ну если надо сгенерировать случайную строку, то можно генерировать случаное число и преобразовывать их из аски в символ=)

-~{}~ 14.08.06 16:47:

вот так это можно сделать

for($i=0; $i<7; $i++){
$random_string .= chr(rand(0,25)+65);
}
echo $random_string;
 
Сверху