-1

我需要函数工作反转为 preg_grep

我有一系列模式。例如

$x =['([a-z]*)\.html'=>'category','^([0-9])*-([a-zA-Z]*)'=>'article/$1'];

和字符串$s='176-title-of-article'

我需要使用数组键匹配字符串并从数组中返回替换值,或者在本例中为“article/176”。

当然我需要这个来进行路由,但是非常简单,并且使用来自 symfony 或 Zend 的路由模块对我的应用程序来说太重了。

4

1 回答 1

1

必须修复您的正则表达式以匹配 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);
于 2013-07-24T12:36:03.630 回答