正则表达式发现 - >找到并替换

时间:2011-01-20 10:58:39

标签: php regex


我有这个代码!

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

我需要采取最后一次

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

然后在'时间'之后的最后一个div中取数字,然后求它(6 + 9),然后将结果放入{INFO}字段。
只需使用preg_replace

结果:

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

如何带最后一个孩子(元素div)?
怎么做一个数字?
如何记住(使用$ 1或%1)?
THX。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分:0)

  

如何带最后一个孩子(元素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