保存在正则表达式php中找到的部分

时间:2019-02-23 22:04:52

标签: php

我正在使用这个

<?php echo preg_replace("/\[car:\s*(\d+)\]/", "<a href=".base_url("logs/veh/" . MISSING_PART).">[car:".MISSING_PART."]</a>", $row->log); ?>

我正在使用它来找到:[car:car_id]并在其上放置一个href链接。但我需要找到的汽车ID而不是MISSING_PART

例如: [汽车:1]

<a href=".base_url("logs/veh/" . 1).">[car: 1]</a>

有人有主意吗?

2 个答案:

答案 0 :(得分:0)

由于您正在使用捕获组(1),因此将其用作替代组(\1

preg_replace("/\[car:\s*(\d+)\]/", '<a href="' . '.base_url(\'logs/veh/' . '\1' . '\')">[car:\1]</a>', $row->log); 

如果098765是捕获的car_id,则最终应以以下网址结尾:

<a href=".base_url('logs/veh/098765')">[car:098765]</a>

如果base_url是一个函数(如注释中所述),则可以执行以下操作:

preg_replace("/\[car:\s*(\d+)\]/", '<a href="' . base_url("logs/veh/$1") . '">[car:\1]</a>', $row->log);

应该导致的结果:

<a href="logs/veh/098765">[car:098765]</a>

答案 1 :(得分:0)

替换字符串中的

$1将被与正则表达式中第一个捕获组匹配的部分替换。

但是,如果您需要调用一个函数(例如base_url())来获取替换字符串,则必须使用preg_replace_callback()。该函数的参数是一个数组,其元素0是整个匹配项,其他元素是捕获的组。

<?php echo preg_replace("/\[car:\s*(\d+)\]/", 
                function($matches) {
                    return "<a href=".base_url("logs/veh/" . $matches[1]).">[car:".$matches[1]."]</a>";
                }, $row->log); ?>