这主要是一个正则表达式问题,但它正在 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
构造)应该足够了。
关于php - 用于匹配值并替换为特定相关值的正则表达式规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887647/