gpt4 book ai didi

php - 使用正则表达式将 URL 与模式匹配,返回键数组

转载 作者:搜寻专家 更新时间:2023-10-31 21:36:46 25 4
gpt4 key购买 nike

我在 PHP 中组装了一个路由器,它匹配一个模式,比如“users/:id”,到一个路由,比如“users/123”,返回类似“id”=> 123 的东西。这就是我到目前为止。

function match_path($path, $pattern){
if ($path == $pattern){
return true;
}
// check for :replacements
if (strpos($pattern, ":")!== false) {
// split path & pattern into fragments
$split_path = explode('/',$path);
$split_pattern = explode('/', $pattern);
// check that they are the same length
if (count($split_path) !== count($split_pattern)){
return false;
}
// iterate over pattern
foreach ($split_pattern as $index => $fragment) {
// if fragment is wild
if (strpos($fragment, ":") == 0){
$params[substr($fragment, 1)] = $split_path[$index];
// if fragment doesn't match
} elseif ($fragment !== $split_path[$index]) {
return false;
}
// continue if pattern matches
}
// returns hash of extracted parameters
return $params;
}
return false;

}

我确信一定有一种方法可以用正则表达式干净利落地做到这一点。

更好的是,很可能有一个 PHP 函数可以执行此操作。

最佳答案

PHP on Rails,嗯? ;-)

关于 strpos 行为的重要说明: 您应该使用 strict === 运算符进行检查,因为它可能会返回 false(来源:http://php.net/manual/en/function.strpos.php).经过粗略的阅读/测试,这就是我看到的所有脚本错误...

<?php
// routes-test.php

echo "should be [ id => 123 ]:\n";
var_dump( match_path( 'user/123', 'user/:id' ) );

function match_path($path, $pattern) { ... }
?>

// cmd line
$ php routes-test.php # your implementation
should be [ id => 123 ]:
array(2) {
["ser"]=>
string(4) "user"
["id"]=>
string(3) "123"
}
$ php routes-test.php # using ===
should be [ id => 123 ]:
array(1) {
["id"]=>
string(3) "123"
}

您应该采用 YAGNI 方法来使用正则表达式。如果您要做的只是匹配 /^:\w+$/ 之类的东西,那么您可以更快地完成它,并且与 strpos 和 friend 的行数相当。

关于php - 使用正则表达式将 URL 与模式匹配,返回键数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com