Автор Тема: прошу помочь разобрать регулярное выражение  (Прочитано 9313 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
$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);
переменная с текстом, которую мы мучим.
« Последнее редактирование: 25 Марта 2004, 16:43:24 от qik »

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
[^.]* - Любой кроме любого, найдёт только символы перехода на новую строку "\\n" :)

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

qik Нда, что это за кракозябры такие? Может скажешь что тебе надо сделать?
Мне тормоз послужил толчком...

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
Цитировать
Neter:
..+ - а это что за "красота"?

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

да проблема была в том что код беря из папки названия файлов (графических) обрезал всю шелуху ну к примеру из 0067_superPix.jpg делал superPix

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
ты сам уж определи условия замены имен файлов, и можно с этого условия понятным тебе языком написать выражение.
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
Mаster
я тебя не понял,
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix

Оффлайн Mаster

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://code.msk.ru/
qik
имеются ввиду все условия... уз чего, ты чего очеш сделать?

и вообче зачем тебе это нужно... проинформировать об этом будет уместно. не находиш?
Дурак учится на своих ошибках, умный на чужих.
умные учатся у дураков

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
простецкая галлерея код берет из папки имена файлов с картинками, обрезает шелуху, запихивает в таблицу результат, ну конечно и ссылочку соответсвенно присабачивает.

еще вопросик можно ли получить от каждого файла его размер и дату записи на сервер?

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
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);

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

И вобще оффтопик вся эта тема :)
Мне тормоз послужил толчком...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
qik:
условия замены заключены в том чтобы из 0067_superPix.jpg сделать superPix

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

Цитировать
qik:
$file=preg_replace ("/^[^_]*?_([^\\.]*)\\..+$/i", "\\\\1", $text);
модиф. - нет разницы какой регистр.
если в регекспе не используются буквы, то модификтор i не нужен
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
Neter
Макс
спасибо.

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
Neter
а как на счет размера файла?
Макс
strpos - вообще не понял к чему ты это?
substr - он не универсален, ведь могут быть цифры 003 и 00003, расширения могут быть jpg, а могут и jpeg и тд.

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
http://ru2.php.net/manual/en/ref.filesystem.php
Поищи в мануале.

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


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

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

Делает то-же самое в два раза быстрее, правда только если символ "_" присутствует всегда.
Мне тормоз послужил толчком...

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
Neter
вай, вай, вай, как же все таки этот php разнообразен. спасибо за код. действительно проще для понимания а вот на счет быстроты исполнения не знаю, а как это эффективно проверить?

Оффлайн qik

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 265
  • +0/-0
  • 0
    • Просмотр профиля
    • http://zapostil.ru/
нашел filesize - как сделать чтоб вывод был в мегабайтах?

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Нда. Закройте тему, она себя исчерпала.
Мне тормоз послужил толчком...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28