正则表达式问题

发布于 2024-10-16 04:07:46 字数 908 浏览 5 评论 0原文

我有以下 URL 结构,需要匹配并从中获取特定 id:

/group/subgroup/id-name

简而言之,我需要翻译如下 URL:

/Blue Products/Dark Blue/5-Blue_Jelly

至:

/?pagename=Blue Products&model=5

重要: 我不需要匹配群组,我已经有群组了。

示例代码:

<?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);
    }

I have the following URL structure which I need to match to and get the particular id from:

/group/subgroup/id-name

In short, I need to translate a URL like the following:

/Blue Products/Dark Blue/5-Blue_Jelly

To:

/?pagename=Blue Products&model=5

IMPORTANT: I don't need to match group, I already have group.

Example code:

<?php

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

?>

Edit:

This is the completed code:

    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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

她说她爱他 2024-10-23 04:07:46

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

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

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

You can use \d+ to match decimals.

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

Use # as outer delimiters to avoid extraneous escaping of \/

岁月蹉跎了容颜 2024-10-23 04:07:46

当您可以使用简单的字符串函数时,为什么要使用正则表达式,如下所示:

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

Why use regex when you can use simple string functions like so:

$parts = explode('/', trim('/Blue Products/Dark Blue/5-Blue_Jelly', '/'));
list($group, $subgroup, $id_name) = $parts;
哎呦我呸! 2024-10-23 04:07:46

试试这个:

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

希望这有效!

Try this one:

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

Hope this works!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文