preg_grep - 反转工作

时间:2013-07-24 12:16:24

标签: php regex

我需要将函数反转为preg_grep

我有一系列模式。例如

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

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

我需要匹配字符串与数组的键,并从数组中返回替换值,或者在这种情况下' article / 176'。

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

1 个答案:

答案 0 :(得分: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);