我有这个代码!
<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。
答案 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