2014-10-07 33 views
0

我用下面的代碼中插入數字ID的段落標記...修改preg_replace_callback插入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爲「最後」在最後一個段落標記,像這樣的:

<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 =「最後」

有誰知道如何修改它,以便最後一段有一個ID =「最後」?如果不是太複雜,它甚至會更好,如果最後一段有一個數字ID,但A類「最後,」像這樣...

<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); 

文章顯示確定,但段落標籤沒有ID。

回答

0

很簡單。你必須比以前「捕捉」更多。

// 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); 
//      )->   )       
+0

謝謝,但我很困惑。它不適合我,可能是因爲我還沒有想出如何製作$ r = $ Article。我已經嘗試了明顯的,但它不適合我。另外,你的代碼是preg_replace,而不是preg_replace_callback。這很好,除了preg_replace導致錯誤...雖然你的腳本不會產生相同的錯誤。無論如何,我以爲我在某處讀過preg_replace已被棄用,應該用preg_replace_callback替換。就像我說的,我很困惑。 ;) – 2014-10-07 01:26:13

+0

@DavidBlomstrom,這個preg_replace沒有'e'修飾符。僅用「e」修飾符棄用preg_replace。從這裏閱讀更改日誌:http://php.net/preg_replace – sectus 2014-10-07 01:28:56

+0

並且[there](http://php.net/manual/en/reference.pcre.pattern.modifiers.php)關於此修飾符 – sectus 2014-10-07 01:30:14