正则表达式问题

时间:2011-02-04 12:17:23

标签: php regex replace match

我有以下网址结构,我需要匹配并从中获取特定的ID:

/group/subgroup/id-name

简而言之,我需要翻译以下网址:

/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 个答案:

答案 0 :(得分:2)

您可以使用\d+来匹配 d ecimals。

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

使用#作为外部分隔符,以避免无关的\/转义

答案 1 :(得分:1)

为什么在使用简单的字符串函数时可以使用正则表达式:

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

答案 2 :(得分:1)

试试这个:

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

希望这有效!