Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нужно разделить URL
 
 автор: kanaris   (17.05.2008 в 17:05)   письмо автору
 
 

Нужно разделить URL'ы следующих видов:

elkg/sadg/ewn/gh_er/ew/dev/core/urltest/2007/02/03/sdrgkjl.html
elkg/sadg/ewn/gh_er/ew/dev/core/urltest/2007/02/03/666

на составляющие:

1) elkg/sadg/ewn/gh_er/ew/dev/core/urltest/ (путь, каждое звено может состоять из больших и маленьких лат. букв, _ и -, звеньев может быть от нуля до +бесконечности)
2) 2007/02/03/ (дата. ее может вообще не быть, может состоять из года; года и месяца; года, месяца и числа)
3) sdrgkjl.html (файл, может быть не указан, имя состоит из a-z, A-Z, 0-9, -, _, а расширение только html)
4) 666 (файл без расширения, якобы номер страницы, представляет собой только число. элемент может не встречаться)

должно работать с урлами любого вида:

elkg/sadg/ewn/gh_er/ew/dev/
core/urltest/
urltest/2007/02/
sdfsdf/sdrgkjl.html
core/urltest/25

и тд.

Пробовал следующее:


$url='elkg/sadg/ewn/gh_er/ew/dev/core/urltest/2007/02/03/sdrgkjl.html';

preg_match('|([a-z_\-\.]+[\/])*?(\d{2,4}[\/]){1,3}?([\d]*)([a-z_-]+\.[a-z]{3,4})|i',$url,$out);

echo '<pre>'.print_r($out,true).'</pre>';
echo $url;


выводит вот что:


Array
(
    [0] => urltest/2007/02/03/sdrgkjl.htm
    [1] => urltest/
    [2] => 03/
    [3] => 
    [4] => sdrgkjl.htm
)


Не правильно в общем! Кто поможет?

   
 
 автор: cheops   (17.05.2008 в 21:15)   письмо автору
 
   для: kanaris   (17.05.2008 в 17:05)
 

Возможно вас заинтересует следующий скрипт
<?php
  $url 
"elkg/sadg/ewn/gh_er/ew/dev/core/urltest/2007/02/03/sdrgkjl.html"
  
$pattern "|^([-a-z_\./]+?)(\d{4}/\d{2}/\d{2}/)(.+?)$|i";

  
preg_match($pattern$url$out); 

  echo 
'<pre>'.print_r($out,true).'</pre>'
  echo 
$url;
?>

   
 
 автор: kanaris   (17.05.2008 в 23:11)   письмо автору
 
   для: cheops   (17.05.2008 в 21:15)
 

нет, это не правильно работает. Если бы URL был таким

elkg/sadg/ewn/gh_er/ew/dev/core/urltest/sdrgkjl.html (т.е. без даты)
elkg/sadg/ewn/gh_er/ew/dev/core/urltest/2007/02/sdrgkjl.html (или дата без числа)


то ничего не работало бы. А если бы таким

elkg/sadg/2007/02/03/ewn/gh_er/ew/dev/core/urltest/sdrgkjl.html (дата не в конце цепочки директорий)


то работало бы (а это не правильно). Или если не указать путь

2007/02/03/sdrgkjl.html


тоже не будет работать.

В общем я пришел к правильному решению. Это работает как часы:

preg_match('<(([a-z_\-\.]+[\/])*)(((\d{2,4}[\/]){1,3})?)(([a-z0-9_\-]+[\.][a-z]{3,4})|([\d]*))?>i',$url,$out);

echo $out[1].'<br/>'; // путь
echo $out[3].'<br/>'; // дата
echo $out[6].'<br/>'; // номер страницы
echo $out[7].'<br/>'; // имя файла


p.s. простите за оффтоп, че за движок у вашего форума? самописный, чтоли?

   
 
 автор: AcidTrash   (19.05.2008 в 21:43)   письмо автору
 
   для: kanaris   (17.05.2008 в 23:11)
 

>че за движок у вашего форума? самописный, чтоли?

Странный вопрос, а почему бы нет? Или вы думаете, что все должны пользоваться форумами, типа phpBB, или такого плана?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования