Forum Webscript.Ru

Программирование => PHP => Тема начата: qik от 25 Марта 2004, 00:01:28

Название: прошу помочь разобрать регулярное выражение
Отправлено: 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);
переменная с текстом, которую мы мучим.
Название: прошу помочь разобрать регулярное выражение
Отправлено: Neter от 25 Марта 2004, 10:45:53
[^.]* - Любой кроме любого, найдёт только символы перехода на новую строку "\\n" :)

..+ - а это что за "красота"? :)

qik Нда, что это за кракозябры такие? Может скажешь что тебе надо сделать?
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 25 Марта 2004, 12:57:19
Цитировать
Neter:
..+ - а это что за "красота"?

черт его знает =)
Цитировать
Neter:
Может скажешь что тебе надо сделать?

да проблема была в том что код беря из папки названия файлов (графических) обрезал всю шелуху ну к примеру из 0067_superPix.jpg делал superPix
Название: прошу помочь разобрать регулярное выражение
Отправлено: Mаster от 25 Марта 2004, 16:13:34
ты сам уж определи условия замены имен файлов, и можно с этого условия понятным тебе языком написать выражение.
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 25 Марта 2004, 16:23:12
Mаster
я тебя не понял,
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix
Название: прошу помочь разобрать регулярное выражение
Отправлено: Mаster от 25 Марта 2004, 17:06:14
qik
имеются ввиду все условия... уз чего, ты чего очеш сделать?

и вообче зачем тебе это нужно... проинформировать об этом будет уместно. не находиш?
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 25 Марта 2004, 17:13:42
простецкая галлерея код берет из папки имена файлов с картинками, обрезает шелуху, запихивает в таблицу результат, ну конечно и ссылочку соответсвенно присабачивает.

еще вопросик можно ли получить от каждого файла его размер и дату записи на сервер?
Название: прошу помочь разобрать регулярное выражение
Отправлено: Neter от 25 Марта 2004, 19:56:00
Цитировать
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);

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

И вобще оффтопик вся эта тема :)
Название: прошу помочь разобрать регулярное выражение
Отправлено: Макс от 26 Марта 2004, 00:11:49
Цитировать
qik:
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix

здесь достаточно функций [p]strpos[/p] и [p]substr[/p]

Цитировать
qik:
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
модиф. - нет разницы какой регистр.
если в регекспе не используются буквы, то модификтор i не нужен
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 26 Марта 2004, 01:23:02
Neter
Макс
спасибо.
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 27 Марта 2004, 17:51:44
Neter
а как на счет размера файла?
Макс
strpos - вообще не понял к чему ты это?
substr - он не универсален, ведь могут быть цифры 003 и 00003, расширения могут быть jpg, а могут и jpeg и тд.
Название: прошу помочь разобрать регулярное выражение
Отправлено: Neter от 27 Марта 2004, 22:43:10
http://ru2.php.net/manual/en/ref.filesystem.php
Поищи в мануале.

Цитировать
qik:
strpos - вообще не понял к чему ты это?
substr - он не универсален,


Ну да, не универсален :)) Это я чтобы тему не нарушать на регекспе написал.

$text = substr($text, strpos($text, \'_\')+1, strlen($text)-strpos($text, \'.\'));

Делает то-же самое в два раза быстрее, правда только если символ "_" присутствует всегда.
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 27 Марта 2004, 22:46:07
Neter
вай, вай, вай, как же все таки этот php разнообразен. спасибо за код. действительно проще для понимания а вот на счет быстроты исполнения не знаю, а как это эффективно проверить?
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 27 Марта 2004, 22:54:03
нашел filesize - как сделать чтоб вывод был в мегабайтах?
Название: прошу помочь разобрать регулярное выражение
Отправлено: Neter от 28 Марта 2004, 00:21:56
Нда. Закройте тему, она себя исчерпала.
Название: прошу помочь разобрать регулярное выражение
Отправлено: FreeSpace от 28 Марта 2004, 15:59:01
Цитировать
qik:
как сделать чтоб вывод был в мегабайтах

Подсказка: в одном мегабайте 1048576 байтов
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 29 Марта 2004, 18:04:33
Народ,
извините меня, я че та совсем отупел ж(, надож такое спросить, блин.
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 29 Марта 2004, 18:12:06

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 размер файла?
Название: прошу помочь разобрать регулярное выражение
Отправлено: ThE0ReTiC от 29 Марта 2004, 20:10:45
получить размер файла и дописать его в alt
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 29 Марта 2004, 21:13:31
как?
Название: прошу помочь разобрать регулярное выражение
Отправлено: Neter от 29 Марта 2004, 22:44:54
qik Ты же нашёл функцию filesize() узнай с её помощью размер файла, присвой это значение переменной и вставь её в вывод тэга картинки.
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 30 Марта 2004, 15:21:58
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;
Название: прошу помочь разобрать регулярное выражение
Отправлено: qik от 30 Марта 2004, 15:26:48
кстати с временем - filemtime() такая же фигня. че я не так делаю-то?