首页 > 解决方案 > 使用正则表达式后如何从url获取值?

问题描述

我正在尝试自己制作路线使用的功能。

我有一些网址说,

$url1 = /profile/user/10/

$url2 = /profile/{some_variable}/settings/{some_integer}

url1 的正则表达式,

'/profile/user/[0-9]+/$/'

url2 的正则表达式

'/profile/[az]+/settings/[0-9]+/$/'

描述,我正在尝试检查我的路由文件夹中是否存在某个 url,我可以通过在 by url 和正则表达式之间使用 preg_match() 来实现。

我想从

$url1 = /profile/user/10/

和 {some_variable}、{some_integer} 来自

$url2 = /profile/{some_variable}/settings/{some_integer}

这样我就可以在我的控制器函数中传递这些变量。

请帮忙。

编辑:我有一个包含 URL 正则表达式的数组,当一个 url 被命中时,我得到那个 url 并在数组中匹配它是否存在。如果确实如此,我需要获取 url 中使用的变量。

Array (
    [specific_user] => Array
        (
            [url] => /profile\/user\/[0-9]+\/$/
            [className] => user
            [methodName] => userinfo
        )

    [specific_user_check] => Array
        (
            [url] => /profile\/user\/[a-z]+\/$/
            [className] => user
            [methodName] => userinfo
        )

    [user_settings] => Array
        (
            [url] => /profile\/user\/settings\/$/
            [className] => user
            [methodName] => settings
        )  )

这里,

$myUrl = /profile/user/10/

如果 $myUrl 与数组中的正则表达式匹配,那么我需要获取值 '10'。

注意: (.*) 以某种方式用于获得所需的结果。

标签: phpregexurlroutes

解决方案


您可以通过 PHP 函数轻松实现这一点,而不是使用正则表达式explode()

这里是代码示例

$url2 = "/profile/some_variable/settings/10";

$url_values = explode("/",$url2);

$variable = $url_values[2];
$integer = $url_values[4];

如果您不确定索引,您可以遍历数组并在下一个索引上找到值来配置文件设置


推荐阅读