【发布时间】:2011-02-19 03:47:18
【问题描述】:
我有一个 Joomla 插件(在这种情况下并不重要),该插件旨在接受带有大量数字的输入(在一段文本中)并用一系列 s 替换它们。
我的问题是我需要对我的 $article->text 进行 preg_replace,但我不知道如何将更改应用于匹配的条款。我见过 preg_replace_callback,但我不知道如何在函数中调用它。
function onPrepareContent( &$article, &$params, $limitstart )
{
global $mainframe;
// define the regular expression
$pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
if(isset($article->text)){
preg_match($pattern, $article->text, $matches);
$numbers = explode("," , $matches[1]);
foreach ($numbers as $number) {
echo "<div class='number'><span>" . $number . "</span></div>";
}
}else{
$article->text = 'No numbers';
}
return true;
}
修改代码:
function onPrepareContent( &$article, &$params, $limitstart )
{
global $mainframe;
// define the regular expression
$pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s";
if(isset($article->text)){
preg_match($pattern, $article->text, $matches);
$numbers = explode("," , $matches[1]);
foreach ($numbers as $number) {
$numberlist[] = "<div class='number'><span>" . $number . "</span></div>";
}
$numberlist = implode("", $numberlist);
$article->text = preg_replace($pattern, $numberlist, $article->text);
}else{
$article->text = 'No numbers';
}
return true;
}
【问题讨论】:
-
我以前用过这个功能,所以我可以帮助你,但你必须更好地向我解释这个问题
-
抱歉伙计们,当我重新阅读它时,我想知道它是否有意义。我已经将它重写为预期的效果,但它似乎很麻烦。期望的结果是:1)在文本中找到术语 {lotterynumbers} 2)提取数字(csv)并在每个数字周围包装一个 div 3)将其泵回 $article->text 我已将修改后的代码放入问题
-
为什么修改后的功能不起作用?好像没问题。
-
只是先做 preg_match,然后再做 preg_replace 似乎有点麻烦。
-
使用 preg_replace_callback 函数,您必须先执行 preg_replace_callback,然后再执行 preg_replace,所以我认为这不会更好:)
标签: php regex preg-replace preg-replace-callback