修改preg_replace_callback以在段落标记中插入ID

时间:2014-10-07 00:50:24

标签: php

我使用以下代码在段落标记中插入数字ID ...

$c = 1;
$r = preg_replace('/(<p( [^>]+)?>)/ie', '"<p\2 id=\"" . $c++ . "\">"', $Article);
$r = preg_replace('/(<p.*?)id="'.($c-1).'"(>)/i', '\1id="Last"\2', $r);
$Article = $r;

但是,它在最后一个段落标记中插入了id“last”,如下所示:

<p id="1">
<p id="2">
<p id="last">

然而,它开始抛出错误,所以我不得不将其更改为preg_replace_callback ......

$c = 1;
$r = preg_replace_callback('~<p([^>]*)>~i', function($res) use (&$c){
 return '<p'.$res[1].' id="'.$c++.'">';
}, $Article);

它工作正常,除了它不再给最后一段id =“last”

有谁知道如何修改它,以便最后一段有一个id =“last”?如果它不是太复杂,如果最后一个段落有一个数字ID但是CLASS“最后”,那就更好了......

<p id="1">
<p id="2">
<p id="3" class="last">

修改

这是我最近的尝试......

$c = 1;
$r = preg_replace('/(<p.*?)id="'.($c-1).'"(>)/i', '\1id="Last"\2', $Article);                   
$Article = preg_replace('/(<p.*?id="'.($c-1).'")(>)/i', '\1 class="Last"\2', $Article);
//                        )->

$Content = str_replace('$Name_Common', '<span style="color: #900"><strong>'.$Common.'</strong></span>', $Article);

文章显示OK,但段落标签没有ID。

1 个答案:

答案 0 :(得分:0)

很简单。你必须&#34;赶上&#34;比以前更多。

// replace your line
$r = preg_replace('/(<p.*?)id="'.($c-1).'"(>)/i', '\1id="Last"\2', $r);
// with this one
$r = preg_replace('/(<p.*?id="'.($c-1).'")(>)/i', '\1 class="Last"\2', $r);
//                        )->            )