PHP:调用preg_match的反向搜索顺序解决方案
我从我们的内部指导方针中采纳了建议的解决方案,再次感谢上级 我现在有以下代码:PHP:调用preg_match的反向搜索顺序解决方案,php,preg-match,Php,Preg Match,我从我们的内部指导方针中采纳了建议的解决方案,再次感谢上级 我现在有以下代码: public function parseRequestedView($url) { $this->view_requested = explode('/', trim($url, '/')); // Format: [0] viewpoint, [1] child, [2] action (default: show), [3] reference $this->view_m
public function parseRequestedView($url) {
$this->view_requested = explode('/', trim($url, '/'));
// Format: [0] viewpoint, [1] child, [2] action (default: show), [3] reference
$this->view_map = array(
$this->parseViewMapArrayKey('device/:reference:/configurations') => array(0, 2, -1, 1),
$this->parseViewMapArrayKey('device/:reference:') => array(0, -1, -1, 1)
);
foreach ($this->view_map as $this->view_map_transitory => $this->view_map_indices) {
if (preg_match($this->view_map_transitory, $url)) {
foreach ($this->view_map_indices as $this->view_index) {
$this->view_resources[] = $this->view_index > -1 ? $this->view_requested[$this->view_index] : null;
}
return $this->view_resources;
}
}
return false;
}
public function parseViewMapArrayKey($key) {
return '#'.str_replace([":reference:", ":string:"], ["\d+", ".+"], $key).'#';
}
除了一个小问题外,它工作正常:
当我切换键device/:reference:和device/:reference:/configurations,然后调用device/:reference:/configurations的视图时,我只得到device/:reference的结果
例如,将输出:
Array
(
[0] => device
[1] =>
[2] =>
[3] => 123456
)
这就是我们的结果。当我将钥匙更改回原来的顺序时,一切都应该是这样的:
Array
(
[0] => device
[1] => configurations
[2] =>
[3] => 123456
)
切换按键时,如何反转搜索顺序或使函数输出正确的结果
我找到了这个。但据我所知,这是一场消极的赛前比赛。还是我错了
提前谢谢。好的,也许这是一个愚蠢的答案,但也许你可以确保你的正则表达式以^开头,以$结尾 比如说
public function parseViewMapArrayKey($key) {
return '#^'.str_replace([":reference:", ":string:"], ["\d+", ".+"], $key).'$#';
}
问题是,当$$this->view\u map中的一个键第一次匹配时,您就从函数返回。因此,您需要按优先级顺序输入它们。如果不想更改首选项,为什么要切换按键?功能是否有办法自动计算优先级?然后使用一个排序函数按照这个顺序重新排序。谢谢你的回答。这不是一个真正的问题,只是想知道我的实现是否有问题,或者它是否按照设计工作,因为我对regex非常陌生。我不太了解你的应用程序,所以很难说。两个正则表达式都匹配URL,这应该发生吗?因为它们都匹配,所以顺序很重要,因为它使用第一个匹配的顺序。较长的正则表达式更为具体,因为它还检查:reference:之后的单词,所以您可能应该将其放在第一位。再次感谢。由于整个事情对时间至关重要,我将把这个问题添加到我的待办事项列表中,暂时不谈。但首先我将学习一些关于正则表达式的资料。也许你只需要在正则表达式的末尾添加一个$,这样“device/:reference:”将与URL不匹配http://ww.foo.com/device/123456/configurations. 正如我所说的,我不明白应用程序在做什么,所以我不知道这是否适合您的需要。