我需要函数工作反转为 preg_grep
我有一系列模式。例如
$x =['([a-z]*)\.html'=>'category','^([0-9])*-([a-zA-Z]*)'=>'article/$1'];
和字符串$s='176-title-of-article'
我需要使用数组键匹配字符串并从数组中返回替换值,或者在本例中为“article/176”。
当然我需要这个来进行路由,但是非常简单,并且使用来自 symfony 或 Zend 的路由模块对我的应用程序来说太重了。
必须修复您的正则表达式以匹配 176,因为您现有的正则表达式仅匹配第一个数字。
<?php
$patterns = array(
'([a-z]*)\.html' => 'category',
'^([0-9]*)-([a-zA-Z]*)' => 'article/$1'
);
$in = '176-title-of-article';
$out = null;
foreach ($patterns as $pattern => $replacement) {
if (preg_match('/' . str_replace('/', '\\/', $pattern) . '/', $in, $match)) {
$out = preg_replace_callback('/\$(\d+)/', function ($placeholder) use ($match) {
if (!isset($match[$placeholder[1]])) {
throw new Exception("route replacement contains invalid capture group '\${$placeholder[1]}'.");
}
return $match[$placeholder[1]];
}, $replacement);
break;
}
}
var_dump($out);