2011-01-20 60 views
1


我有這段代碼!
正則表達式查找 - >找到並替換

<div class="time\54> 
<div class="time\98"> 
<div class="time\69"> 
<div id="result">{INFO}</div> 

我需要最後

'<div class="time\69">' 

然後取數在 '時間' 在此之後最後一個div,總結它(6 + 9),然後把結果放入{信息}字段。
需要只使用了preg_replace

結果:

<div class="time\54> 
<div class="time\98"> 
<div class="time\69"> 
<div id="result">15</div> 

如何把最後一個孩子(元素DIV)?
如何做一個數字的總和?
如何記住(使用$ 1或%1)?
Thx。

+0

問題是:你好嗎?你有這個HTML?你是否通過PHP生成它?通過`foreach`? – Shikiryu 2011-01-20 11:11:44

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Marnix 2011-01-20 11:12:34

回答

1
$src = '<div class="edit\5451" style="width:100%; text-align:left"> 
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874"> 
<div class="edit\6924" style="padding:0px 0px 6px 0px"> 
<div id="result">{RESULT}</div> '; 

echo preg_replace('#(<div class="edit[\\\])([0-9]+)("[^<]+<div id="result">)([^<]+)(</div>)#mse','"$1$2$3".array_sum(str_split($2))."$5"', $src); 
0

如何取最後一個孩子(element div)?

Regexp不是處理HTML的適當工具。使用DOMDocument::loadHTML()來創建DOM樹,然後訪問最後的<div class="time\...">應該很容易。

如何做一個數字的總和?

$number = '69'; 
$digits = str_split($number); // Array (0 => 6, 1 => 9) 
$sum = array_sum($digits); // 15 
1

假設你使用的preg_replace,下面的工作:

$str = '<div class="time\54> 
<div class="time\98"> 
<div class="time\12"> 
<div class="time\69"> 
<div id="result">{INFO}</div>'; 

function replace_callback($matches) { 
     return $matches[1] . array_sum(str_split($matches[2],"1")); 
} 

$result = preg_replace_callback('#((?:.*<div class="time\\\\\d+">)*.*<div class="time\\\\(\d+)">.*)\{INFO\}#s', 'replace_callback', $str); 

如果你甚至不能使用preg_replace_callback,這是唯一的preg_replace替代:

$result = preg_replace('#((?:.*<div class="time\\\\\d+">)*.*<div class="time\\\\(\d+)">.*)\{INFO\}#se', '\'\1\' . array_sum(str_split(\'\2\',\'1\'))', $str); 
相關問題