2011-01-20 17 views
1


私はこのコードを持っています!私は最後のregex find - >見つけて置き換える

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

を取る必要がある

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

は次に '時間' の後に、この最後のdivの中の数字を取り、(6 + 9)、それを合計し、{INFO}フィールドにつながる置きます。
だけにpreg_replace

結果使用必要があります。最後の子(要素のdivを)取る方法

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

を?
数字の合計はどのようにするのですか?
覚えておく方法($ 1または%1を使用しますか?)
Thx。

+0

あなたはそのhtmlを持っていますか?あなたはPHP経由でそれを生成しますか? 'foreach'を介して? – Shikiryu

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Marnix

答えて

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

最後の子(要素div)の取得方法は?

RegexpはHTMLを扱うための適切なツールではありません。 DOMDocument::loadHTML()を使用してDOMツリーを作成してから、最後に<div class="time\...">にアクセスするのは簡単です。

数値の合計はどのようにするのですか?あなたがにpreg_replaceを使用するを持っていると仮定

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

ただ1つの関数を使用する必要がありますpreg_replace() – Oyeme

+0

これは宿題ですか?もしそうなら '宿題'タグを付けてください。 – Crozin

+0

explode()は空の区切り文字を使用できません;) – arnaud576875

1

は、次のように動作します:

$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); 
関連する問題