我需要将函数反转为preg_grep
我有一系列模式。例如
$x =['([a-z]*)\.html'=>'category','^([0-9])*-([a-zA-Z]*)'=>'article/$1'];
和字符串$s='176-title-of-article'
我需要匹配字符串与数组的键,并从数组中返回替换值,或者在这种情况下' article / 176'。
当然我需要这个用于路由,但非常简单并且使用来自symfony或Zend的路由模块对我的应用来说非常重要。
答案 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);