Dis*_*oat 5 php regex preg-replace
我有一些像这样的代码,它用一个链接取代了一些短代码:
$search = array(
'#\{r\|([^|]+)\|([^}]+)\}#',
'#\{t\|([^|]+)\|([^}]+)\}#',
...,
);
$replace = array(
'<a href="/ref/$1">$2</a>',
'<a href="/type/$1">$2</a>',
...,
);
$content = preg_replace( $search, $replace, $content );
Run Code Online (Sandbox Code Playgroud)
我有更多相似的东西,所以我想知道,是否有某种方法可以preg_replace通过条件将其简化为一个简单的?
例如,使用正则表达式#\{([a-z])\|([^|]+)\|([^}]+)\}#并根据其字母将第一个匹配替换为不同的东西(r = ref,t = type)?(如果有帮助,那么短代码就像{r|url-slug|LinkTitle}.)
mar*_*rio 10
这需要preg_replace_callback(或者可能只是/eeval修饰符),这将允许您将映射t= type和r= ref放在替换逻辑中:
= preg_replace_callback('#\{([rt])\|([^|]+)\|([^}]+)\}#', "cb_123", ...
function cb_123($m) {
$map = array("t" => "type", "r" => "ref");
$what = $map[ $m[1] ];
return "<a href=\"/$what/$m[2]\">$m[3]</a>";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |