php - 用于匹配值并替换为特定相关值的正则表达式规则

标签 php regex codeigniter

这主要是一个正则表达式问题,但它正在 Codeigniter 的路由文件中使用。路由文件是它尝试匹配的正则表达式规则的列表。因此需要 1 个衬垫。

取以下 4 个字符串:

techniques/foo3
news/bar-4-22   
reviews/non23-a
features/wins

我正在寻找 1 行正则表达式规则,它将查找技术、新闻、评论或功能,并替换为特定的 int 值 5、1、7 或 3。数字对应于名称,因此技术= 5、新闻=1、评论=7、特色=3。斜杠后面的最后一个值可以是任何 URL 友好的文本字符串。我也会选择这个海峡。我本质上想将它们转换为以下内容:

categorysearch/5/foo3
categorysearch/1/bar-4-22   
categorysearch/7/non23-a
categorysearch/3/wins

这可以用 1 行正则表达式来完成吗?

最佳答案

使用preg_replace_callback()像这样:

$tokens = [
    'techniques' => 5,
    'news'       => 1,
    'reviews'    => 7,
    'features'   => 3
];

echo preg_replace_callback('#^([^/]+)/(.*)$#', function ($m) use ($tokens) {
    if (array_key_exists($m[1], $tokens)) {
        return sprintf('%s/%d/%s', $m[1], $tokens[$m[1]], $m[2]);
    }
    return sprintf('%s/%s', $m[1], $m[2]);
}, $string);

如果替换如此简单,则甚至不需要正则表达式。一个简单的sscanf()explode() (使用 list 构造)应该足够了。

Demo

关于php - 用于匹配值并替换为特定相关值的正则表达式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887647/

相关文章:

javascript - 如何使 jAutoCalc 处理动态添加的元素

php - 试图获得非对象的属性? PHP/代码点火器

php - 使用 Doctrine 获取多行、单列数组

php - 我将如何使用 Python 代码扩展我的 PHP 代码库?

javascript - 向正则表达式添加异常

regex - Visual Studio 正则表达式 : Replace all #include statements using backslash with forward slash

php - PHP 中的日期/时间格式

php - LARAVEL - 按钮更改数据库中的 bool 值

php - 从数据库中检索数据时的不同值

php - 带属性的正则表达式