|
|
|
| Нужно разделить 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
)
|
Не правильно в общем! Кто поможет? | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: 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 (дата не в конце цепочки директорий)
|
то работало бы (а это не правильно). Или если не указать путь
тоже не будет работать.
В общем я пришел к правильному решению. Это работает как часы:
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. простите за оффтоп, че за движок у вашего форума? самописный, чтоли? | |
|
|
|
|
|
|
|
для: kanaris
(17.05.2008 в 23:11)
| | >че за движок у вашего форума? самописный, чтоли?
Странный вопрос, а почему бы нет? Или вы думаете, что все должны пользоваться форумами, типа phpBB, или такого плана? | |
|
|
|