$filename = "10_blalvdasdasla.jpg";
preg_match("/([^_]*)_([^.]*).(.*)/i", $filename,$include);
print_r($include);
вОПРОС пРО оБРЕЗАНИЕ =)
у меня переменной $file присвоено значение имени файла в папке (01_blabla.jpg). Как мне обрезать 3 символа спереди и 4 символа сзади, чтоб полкчилось (blabla)?
Цитата:
Originally posted by qik
у меня переменной $file присвоено значение имени файла в папке (01_blabla.jpg). Как мне обрезать 3 символа спереди и 4 символа сзади, чтоб полкчилось (blabla)?
у меня переменной $file присвоено значение имени файла в папке (01_blabla.jpg). Как мне обрезать 3 символа спереди и 4 символа сзади, чтоб полкчилось (blabla)?
Если именно 3 спереди и 4 сзади то substr но лучше описать регуляркой.
Что то типа:
Код:
$a=preg_replace ("/^[^_]*?_([^\.]*)\..+$/i", "\\1", $a);
Код:
<?php
if ($void = @opendir('/home/localhost/www/php/img/')) {
while (false !== ($file = readdir($void))) {
if ($file != "." && $file != "..") {
echo "
<a href=\"$file\">$file</a></p>\n";
}
}
closedir($void);
}
?>
if ($void = @opendir('/home/localhost/www/php/img/')) {
while (false !== ($file = readdir($void))) {
if ($file != "." && $file != "..") {
echo "
<a href=\"$file\">$file</a></p>\n";
}
}
closedir($void);
}
?>
так вот мне нужно просто обрезать 3 символа спереди и 4 сзади у $file.
я так и не понял как действует та регулярка, пробывал через substr - нифига не вышло.
Цитата:
Originally posted by qik
я так и не понял как действует та регулярка, пробывал через substr - нифига не вышло.
я так и не понял как действует та регулярка, пробывал через substr - нифига не вышло.
Вот с этого места по подробней :)
Что конкретно не сработало с substr??
Регулярка простая, берет и выкусывает всё, что между *_ и .*
Лучше используй продвинутый вариант от Alone.
С ней что не понятно?
все ясно - разобрался:
Код:
<?php
//Error_Reporting(E_ALL & ~E_NOTICE);
if ($void = @opendir('/home/localhost/www/php/img/'))
{
while (false !== ($fil = readdir($void)))
{
if ($fil != "." && $fil != "..")
$file=substr($fil, 3, -4);
{
echo "
<a href=\"$fil\">$file</a></p>\n";
}
}
closedir($void);
}
?>
//Error_Reporting(E_ALL & ~E_NOTICE);
if ($void = @opendir('/home/localhost/www/php/img/'))
{
while (false !== ($fil = readdir($void)))
{
if ($fil != "." && $fil != "..")
$file=substr($fil, 3, -4);
{
echo "
<a href=\"$fil\">$file</a></p>\n";
}
}
closedir($void);
}
?>
Регулярка простая, берет и выкусывает всё, что между *_ и .*
в мануале смотрел - нифига не ясно =(
не ясен принцип, да и синтаксис мутный
Лучше используй продвинутый вариант от Alone.ok. а чем он лучше и как его понять? 8)
"Сломается", если файл будет с расширением jpeg вместо jpg или если файлов будет много и первая циферь будет не 10 а 1000.
2. В php-шном мануале не нужно ничего смотреть про регулярные выражения. Сначала их нужно понять концептуально, а потом уже смотреть их применение.
Что бы понять реги, нужно поискать Орейлевскую книгу "Регулярные выражения" (Regular Expressions) -- ничего лучше не видел. А для самого начала можно почитать Яндекс :)
3. Регулярка от Alone просто более грамотная чем моя. Если захочет её описать -- сам опишет :)
Вообще, они (реги) очень полезная штука. Главное, один раз разобраться а потом уже пойдет -- жить без них не сможешь :)
все это хорошо, но не конструктивно =(
Цитата:
Originally posted by qik
все это хорошо, но не конструктивно =(
все это хорошо, но не конструктивно =(
Как сие понимать? Что неконструктивно?
Цитата:
Originally posted by HabaHaba
Как сие понимать? Что неконструктивно?
Как сие понимать? Что неконструктивно?
неконструктивность зак. в том что ты бедняга старался, писал предыдущий пост, и дельного ничего не написал, не считая ссылки на книгу о регул. выраж. которую канечно же я не куплю, =)
а в куске
Код:
$a="01_blabla.jpg";
$a=preg_replace ("/^[^_]*?_([^\.]*)\..+$/i", "\\1", $a);
$a=preg_replace ("/^[^_]*?_([^\.]*)\..+$/i", "\\1", $a);
так и не помог разобраться, хотя это конечно же к Алону.
Цитата:
Originally posted by qik
неконструктивность зак. в том что ты бедняга старался, писал предыдущий пост, и дельного ничего не написал
неконструктивность зак. в том что ты бедняга старался, писал предыдущий пост, и дельного ничего не написал
Ок, персонально для тебя больше стараться не буду.
RTFM.
немного уважения к тем людям которые тебе хотят помоч...
поповоду моей регулярки она мало отличается от варианта HabaHaba за исключением некоторых нюансов...
насчет регуляки ищи здесь:http://forums.webscript.ru/showthread.php?s=&threadid=13780&msgnum=2
спасибо, рульная ссылка, вот видишь ты поступил конструктивно.
2HabaHaba
да не обижайся ты, я же не хотел тебя обидеть, просто я не так выразился. кароче без обид. извенини если что.
$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);
параметр ассоциированный с текстом в котором идет поиск.