Проблема с регулярными выражениями - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть следующая структура URL, с которой мне нужно соответствовать и получить конкретный идентификатор:

/group/subgroup/id-name

Короче говоря, мне нужно перевести URL следующим образом:

/Blue Products/Dark Blue/5-Blue_Jelly

Кому:

/?pagename=Blue Products&model=5

ВАЖНО: Мне не нужно совпадать group, у меня уже есть группа.

Пример кода:

<?php

    foreach($cats as $cat)
        $cmd->rewrite('/\/'.$cat.'\/unused\/(ID)-unused\//','/?pagename='.$cat.'&model=%ID%');

?>

Редактировать:

Это полный код:

    if($groups->count()){

        $names=array();
        foreach($groups->rows as $row)
            $names[]=preg_quote($row->group);
        $names=implode('|',$names);

        $regex='('.$names.')/([^/]+)/([0-9]{1,})-([^/]+)/?$';

        CmsHost::cms()->rewrite_url($regex,'index.php?pagename=Products',true);
    }

Ответы [ 3 ]

2 голосов
/ 04 февраля 2011

Вы можете использовать \d+ для соответствия d эксилам.

$cmd->rewrite("#/$cat/.+?/(\d+)-.*?/#', ...

Используйте # в качестве внешних разделителей, чтобы избежать постороннего экранирования \/

1 голос
/ 04 февраля 2011

Попробуйте это:

$url = preg_replace("'/".$cat."/[^/]+/([0-9]+)-.*'i","/?pagename=".$cat."&model=\\1",$url);

Надеюсь, это работает!

1 голос
/ 04 февраля 2011

Зачем использовать регулярное выражение, если вы можете использовать простые строковые функции, например, так:

$parts = explode('/', trim('/Blue Products/Dark Blue/5-Blue_Jelly', '/'));
list($group, $subgroup, $id_name) = $parts;
...