Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с регулярками 
V
    Опции темы
DioNiR
Дата 9.3.2007, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



У меня есть разные файлы с разными расширениями.

Проьлема такова так как я с регулярками почемуто не дружу и не знаю реально ли так сделть.
Нужно узнать расширение файла. Проверить существует ли файл расширение.php и вставить его. Если нет то вставляет какой нить по стандарту. 

как такое организовать?
--------------------
Думали это конец? Ха, всё только начинается.
PM MAIL   Вверх
mishaSL
Дата 9.3.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



DioNiR, опишите проблему четче, а то непонятно что и где Вы собираетесь проверять. Если Вам необходимо проверить существование файла, то можете воспользоваться file_exists()

Если Вы хотите из переменной содержащей имя файла получить его расширение, то можно так:
Код

<?php
$name = 'file.php';
preg_match('/.*?\.([a-z]{2,4})$/is', $name, $match);
print 'Файл '.$name.' имеет расширение '.$match[1];
?>



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SelenIT
Дата 9.3.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



mishaSL, имхо, брать расширение файла регулярками - все же перебор. Тем более пример выше не "возьмет", к примеру, .mp3 или .class. По-моему, для большинства практических целей вполне достаточно strrchr('.', $name). А если нужны все расширения (.tar.gz) - то что-нибудь вроде такого...
Код

list($name, $extension) = explode('.', $full_name, 2);



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
mishaSL
Дата 9.3.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



Цитата(SelenIT @  9.3.2007,  17:59 Найти цитируемый пост)
пример выше не "возьмет", к примеру, .mp3 или .class. 


.class - возьмет, а про цифры я и забыл, тогда лучше так:
Код

$name = 'class.file.php5';
preg_match('/.*?\.([^.]{2,4})$/is', $name, $match);
print 'Файл '.$name.' имеет расширение '.$match[1];





Цитата(SelenIT @  9.3.2007,  17:59 Найти цитируемый пост)
list($name, $extension) = explode('.', $full_name, 2);


На практике часто используются имена такого вида: class.file.php
У твоего подхода будут проблемки с такими именами...



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
SelenIT
Дата 9.3.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



mishaSL, так я это и имел в виду - все зависит от того, что считаем расширением. Если только последнее - то достаточно strrchr, если все "от первой точки", как в примере с .tar.gz - то эксплод на 2 части по первой точке. Ну а если нужна полная гибкость и .tar.gz необходимо считать расширением, а class.file в Вашем последнем примере - частью имени, тогда, наверное, действительно только регулярка вроде
Код

preg_match('/\.(((tar|exe|doc|txt)\.)?[^.]+)$/is', $name, $match);
с полным перечислением всех допустимых по условию задачи вариантов первого расширения - другого выхода я не вижу...

p.s. А .class Ваш вариант все-таки не возьмет - там 5 букв...



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
mishaSL
Дата 9.3.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 9
Всего: 54



Цитата(SelenIT @  9.3.2007,  19:58 Найти цитируемый пост)
p.s. А .class Ваш вариант все-таки не возьмет - там 5 букв... 


Да это у меня голова после праздника плохо работает...


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
DioNiR
Дата 9.3.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Воспользовался
Код
preg_match('/\.(((tar|exe|doc|txt)\.)?[^.]+)$/is', $name, $match);

Работает так как и нужно.
--------------------
Думали это конец? Ха, всё только начинается.
PM MAIL   Вверх
SelenIT
Дата 9.3.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 8
Всего: 401



DioNiR, обязательно надо было из множества легких вариантов выбрать самый сложный и наверняка в данной конкретной задаче избыточный... smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.