用preg_replace(PHP/Regex)更改最后一段中的ID

用preg_replace(PHP/Regex)更改最后一段中的ID,php,regex,Php,Regex,下面的脚本为每个段落提供一个数字ID,从[p class=“pfirst”ID=“1”]和[p ID=“2”]开始,其中$Article是存储在数据库中的文章。(只有第一段有一个类。) 如果一个段落中有十篇文章,那么最后一个段落标记将是[p id=“10”]。任何正则表达式向导能否告诉我如何修改它,以便最后一段始终显示为[p id=“last”]而不是数字id $c = 1; $r = preg_replace('/(<p( [^>]+)?>)/ie', '"<p\2 i

下面的脚本为每个段落提供一个数字ID,从[p class=“pfirst”ID=“1”]和[p ID=“2”]开始,其中$Article是存储在数据库中的文章。(只有第一段有一个类。)

如果一个段落中有十篇文章,那么最后一个段落标记将是[p id=“10”]。任何正则表达式向导能否告诉我如何修改它,以便最后一段始终显示为[p id=“last”]而不是数字id

$c = 1;
$r = preg_replace('/(<p( [^>]+)?>)/ie', '"<p\2 id=\"" . $c++ . "\">"', $Article);
$Article = $r;
$c=1;
$r=preg_replace(“/(]+)?>)/ie'、“”“”、$Article);
$Article=$r;

这是整个脚本

$SeaURL = str_replace('Washington/', '', $MyURL);

$stm = $pdo->prepare("SELECT P.URL, P.Site, ART.Article
 FROM people P
 LEFT JOIN people_articles ART ON ART.URL = P.URL
 WHERE P.URL LIKE :MyURL AND P.Site = :MySiteID
 GROUP BY Class");
$stm->execute(array(
 'MySiteID'=>$MySiteID, 
 'MyURL'=>'%'.$MyURL.'%'
));

while ($row = $stm->fetch())
{
 $Article = $row['Article'];
}

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

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

echo $Content;
$SeaURL=str_replace('Washington/','',MyURL);
$stm=$pdo->prepare(“选择P.URL、P.Site、ART.Article
来自人民党
LEFT JOIN people\u ART ON ART.URL=P.URL上的文章艺术
其中P.URL类似于:MyURL和P.Site=:MySiteID
按类别分组);
$stm->execute(数组)(
'MySiteID'=>$MySiteID,
“MyURL'=>”%。$MyURL.%”
));
而($row=$stm->fetch())
{
$Article=$row['Article'];
}
$c=1;
$r=preg_replace(“/(]+)?>)/ie'、“”“”、$Article);
$Article=$r;
$Content=str_replace(“$Name_Common”,“”.$Common.”,$Article);
echo$内容;
一种方法:

//$Article ="<p class=\"pfirst\">paragraph 1</p><p>paragraph 2</p><p>paragraph 3</p>";
$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;

请给出更多的代码,一个示例字符串,以及你想从这个示例字符串中获得什么,因为它是无法理解的。我不明白你所说的“php可执行文件”是什么意思。你是说使用这个脚本可以让人们入侵我的网页吗?理论上,是的,它使我的网页更易于理解。如果你文章中的一些p标签将有它将执行它。只要你自己把内容放在数据库中,这是可以的(太长了,无法在注释中解释),但使用preg_replace_回调或类似的方法会更安全。现在不推荐使用
e
修饰符。使用
preg_replace_callback()
代替。好的,我用preg_replace_callback替换了preg_replace,但是我收到了一些错误消息-警告:preg_replace_callback()[function.preg replace callback]:要求参数2“,”在第227行的(路径)中是有效的回调警告:preg_replace_callback()[function.preg replace callback]:需要参数2,“\1id=”Last“\2”作为有效回调,它们不是致命错误,但脚本不起作用;现在它不会在段落标记中插入ID。
$c = 1;
$r = preg_replace_callback('/(<p( [^>]+)?>)/i', function ($res) {
   global $c;
   return '<p'.$res[2].' id="'.intval($c++).'">';
}, $Article);
$r = preg_replace('/(<p.*?)id="'.($c-1).'"(>)/i', '\1id="Last"\2', $r);
$Article = $r;