Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярка


Автор: MoLeX 23.3.2009, 13:28
Привет.
У меня очень слабые знания в регулярках, поэтому прошу помощи  smile 

есть массив
Код

$data['array'] = array('news', 'faq', 'la-la-la');


есть входные данные
  • page-2/p_page-2-3/p_p_page-2-3-2/news/2009-03-14/page_N/id_N.html

на выходе мне надо получить
Код

page-2/p_page-2-3/p_p_page-2-3-2

Автор: zibox86 23.3.2009, 13:36
Именно с этим примером можно определить позицию первого вхождения "/news" и обрезать от начала до этой позиции.

Или входящие данные будут отличными от данного примера?

Автор: Zmiuko 23.3.2009, 13:43
а если просто прогнать по функции:
Код

function string($str) {
     $str = explode('/',$str);
     $str = $str['0'].'/'.$str['1'].'/'.$str['2'];
     return $str;
}

$string = string('page-2/p_page-2-3/p_p_page-2-3-2/news/2009-03-14/page_N/id_N.html');


Добавлено через 2 минуты и 12 секунд
Может я неправильно понял, что требуется?  smile 

Автор: MoLeX 23.3.2009, 13:53
Цитата(zibox86 @  23.3.2009,  13:36 Найти цитируемый пост)
Или входящие данные будут отличными от данного примера? 

аха. в том то и дело что будут.

Добавлено через 17 секунд
Цитата(Zmiuko @  23.3.2009,  13:43 Найти цитируемый пост)
Может я неправильно понял, что требуется? 

см. выше)

Добавлено через 1 минуту и 34 секунды
т.е. ссылки могут быть такими
  • page-2/p_page-2-3/p_p_page-2-3-2/news/2009-03-14/page_N/id_N.html
  • page-2/p_page-2-3/asdas/p_p_page-2-3-2/news/2009-03-14/page_N/id_N.html
  • page-2/p_page-2-3/asdas/p_p_page-2-3-2/sdf/asd/4254/news/2009/03/page_N/id_N.html
и т.д.

Добавлено через 3 минуты и 28 секунд
пока я делаю так:
1. разбиваю url  с помощью explode
2. сравниваю с массивом $data

Автор: Zmiuko 23.3.2009, 14:02
Аналогичный вопрос в одном из прошлых топиков был и у меня, мне необходимо было превратить ссылки:

?mod=new&mc=mod&cm=to&page=12, допустим. 

В такие:

?file=mod-mc-cm-page-pr-new-mod-to-122.pl , без зависимости от названия переменных.

Не решил проблему. 

Точнее написал следущее:

Код

function re_prav_url($u) {
            $str = substr($u, 1);
            $str2 = explode('&', $str);
                for($i=0;$i<count($str2);$i++) {
                    list($a0, $a1) = explode('=', $str2[$i]);
                    $aa[] = $a0;
                    $ab[] = $a1;
                }
            $str = '?file='.implode('-',$aa).'-pr-'.implode('-',$ab).'2.pl';
            return $str;
        }


Но функция через-чур громоздкая и неудобная вышла :(

Добавлено через 2 минуты и 9 секунд
Массив данных был почти аналогичным.

Добавлено через 3 минуты и 2 секунды
Но приходилось дергать массив, подставлять конечной строкой в урл, а урл потом редактировать. До большего я не додумался. :(

Автор: enof 23.3.2009, 14:28
Код

<?php
$data['array'] = array('news', 'faq', 'la-la-la');
$str = "page-2/p_page-2-3/p_p_page-2-3-2/faq/2009-03-14/page_N/id_N.html";
$pattern = "#(.*)/(?:".implode("|", $data['array']).")#iu";
preg_match($pattern, $str, $out);
echo $out[1];
?>

Автор: MoLeX 23.3.2009, 14:45
enof, дружище то что надо.
держи +1 заслуженный

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)