Forum Webscript.Ru
Программирование => PHP => Тема начата: qik от 25 Марта 2004, 00:01:28
-
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
замена текста по регулярному выражению
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
ищем вначале строки.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
все, кроме "_".
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
этот момент не особо ясен, ведь "*" показывает, что символ может как
отсутствовать так и присутствовать в любых кол-вах, а "?" показывает
что, символ может отсутствовать, так и присутствовать, но повториться
не более одного раза, и это все дело относится к символу "_".
по моему хватит просто "?".
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
это новое регул. выраж., то что между \'(\' и \')\'.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
не очень ясно зачем икранирована \'.\', ведь без \'\\\' она рассматревается
как любой символ, а с ним просто как символ точки. но с другой стороны
\'\\.\' находится внутри \'[\' и \']\', а внутри их все метасимволы работают,
но является ли \'\\.\' метасимволом? если да, то почему обязательно писать
\'\\\'?
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
просто точка.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
любой символ.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
я так понимаю что это этносится к \'.\'(любой символ), - он должен быть
и может повторятся.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
тоже относится к \'.\'(любой символ), - искомый текст должен быть в конце
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
модиф. - нет разницы какой регистр.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
все найденное по паттерну заменяется на \'\\\\1\'
это мне не ясно.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
переменная с текстом, которую мы мучим.
-
[^.]* - Любой кроме любого, найдёт только символы перехода на новую строку "\\n" :)
..+ - а это что за "красота"? :)
qik Нда, что это за кракозябры такие? Может скажешь что тебе надо сделать?
-
Neter:
..+ - а это что за "красота"?
черт его знает =)
Neter:
Может скажешь что тебе надо сделать?
да проблема была в том что код беря из папки названия файлов (графических) обрезал всю шелуху ну к примеру из 0067_superPix.jpg делал superPix
-
ты сам уж определи условия замены имен файлов, и можно с этого условия понятным тебе языком написать выражение.
-
Mаster
я тебя не понял,
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix
-
qik
имеются ввиду все условия... уз чего, ты чего очеш сделать?
и вообче зачем тебе это нужно... проинформировать об этом будет уместно. не находиш?
-
простецкая галлерея код берет из папки имена файлов с картинками, обрезает шелуху, запихивает в таблицу результат, ну конечно и ссылочку соответсвенно присабачивает.
еще вопросик можно ли получить от каждого файла его размер и дату записи на сервер?
-
qik:
можно ли получить от каждого файла его размер и дату записи на сервер?
[p]filectime[/p]
qik
Аа.. это у тебя слэши в регекспе порезались :)
Ладно давай разберём.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
Ограничивает жадность квантора * потому как если "_" не будет найдено патерн [^_]* соберёт все символы.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
Собирает все символы пока не встретит точку.
В принцепе здесь экранирование н нужно просто человек перестраховался, я тоже давно регекспы не писал подзабыл, сказал что это "Любой кроме любого" :), на самом деле если "." находится в квадратных скобках то она рассматривается именно как символ точки.
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
\\\\1 - указывает это номер суб-патерна, т.е. суб-патерн обозначается круглыми скобками. "( )"
Вобщем это немного не правильный регексп.
Держи правильный:
$file=preg_replace ("/^(?:.*_)?(.*?)\\.\\w+$/i", "\\\\1", $text);
Его разбирать я не буду, зайди в здешний форум по регулярным выражениям там есть ссылки на документацию.
И вобще оффтопик вся эта тема :)
-
qik:
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix
здесь достаточно функций [p]strpos[/p] и [p]substr[/p]
qik:
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
модиф. - нет разницы какой регистр.
если в регекспе не используются буквы, то модификтор i не нужен
-
Neter
Макс
спасибо.
-
Neter
а как на счет размера файла?
Макс
strpos - вообще не понял к чему ты это?
substr - он не универсален, ведь могут быть цифры 003 и 00003, расширения могут быть jpg, а могут и jpeg и тд.
-
http://ru2.php.net/manual/en/ref.filesystem.php
Поищи в мануале.
qik:
strpos - вообще не понял к чему ты это?
substr - он не универсален,
Ну да, не универсален :)) Это я чтобы тему не нарушать на регекспе написал.
$text = substr($text, strpos($text, \'_\')+1, strlen($text)-strpos($text, \'.\'));
Делает то-же самое в два раза быстрее, правда только если символ "_" присутствует всегда.
-
Neter
вай, вай, вай, как же все таки этот php разнообразен. спасибо за код. действительно проще для понимания а вот на счет быстроты исполнения не знаю, а как это эффективно проверить?
-
нашел filesize - как сделать чтоб вывод был в мегабайтах?
-
Нда. Закройте тему, она себя исчерпала.
-
qik:
как сделать чтоб вывод был в мегабайтах
Подсказка: в одном мегабайте 1048576 байтов
-
Народ,
извините меня, я че та совсем отупел ж(, надож такое спросить, блин.
-
if ($void = @opendir(\'/home/localhost/www/php/img/\'))
{
while (false !== ($fil = readdir($void)))
{
if ($fil != "." && $fil != "..")
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $fil);
{
echo "$file $time
\\n";
}
}
closedir($void);
}
echo $time;
как мне прикрутить в alt размер файла?
-
получить размер файла и дописать его в alt
-
как?
-
qik Ты же нашёл функцию filesize() узнай с её помощью размер файла, присвой это значение переменной и вставь её в вывод тэга картинки.
-
Neter
я не пойму где ее инициалезировать, пишу так - ругается
if ($void = @opendir(\'/home/localhost/www/php/img/\'))
{
while (false !== ($fil = readdir($void)))
{
if ($fil != "." && $fil != "..")
// инициализания ф-ции
$size = filesize($fil);
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $fil);
{
echo "$file $time
\\n";
}
}
closedir($void);
}
echo $time;
-
кстати с временем - filemtime() такая же фигня. че я не так делаю-то?