2011-10-27 5 views
1

PHPで正規表現を使用してテンプレートHTMLファイルのセクションを置き換えようとしています。これまでのところ、私はこれを持っています:htmlのセクションをPHPに置き換える

$docText = OLD_TEXT; 
$text = NEW_TEXT; 
$docText = preg_replace('#<div id="information">[<div>(?R)</div>]*</div>#i x U', 
         $text, 
         $docText, 
         1); 

// Save file 

瞬時には一致しません。目標は外側div全体を置き換えることです。つまり、他のすべてのタグが終了タグではないことを知る必要があります。

+0

$ textの例を投稿できますか? –

+2

最初の質問は、少なくとも関連性はあるものの、誰も愚かなリンクを投稿することはありません。 - そうですね。それは正規表現でなければならないのですか?または、より簡単な提案が可能ですか? - とにかく '?R'の構文を文字クラスとして囲むのは間違っています。あなたはどこを見つけましたか? – mario

+0

簡単なオプションは問題ありません。私はもともとDOMDocumentを試しましたが、それがうまくいかなかったのですが、私は文字列を直接操作しようと決めました。私がリンクを投稿するはずだったら申し訳ありません。 StackOverflowに投稿したのはこれが初めてです。 – DaBritishyankee

答えて

2

私はあなたが欲しいものを理解することはよく分からないが、私はあなたがこれをやろうとしていると思う:

$html = <<<HTML 
<html> 
    <head></head> 
    <body> 
     <div id="information"> 
      <div>Hi!</div> 
     </div> 
     <div id="otherInformation">Hi again!</div> 
    </body> 
</html> 
HTML; 

$replace = '<div id="newInformation">Bye!</div>'; 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$tmp  = $dom->createTextNode('{newContent}'); 

$xpath = new DOMXPath($dom); 

$divInformation = $xpath->query('//div[@id="information"]'); 
$divInformation->item(0)->parentNode->replaceChild($tmp, $divInformation->item(0)); 

$newHTML = str_replace('{newContent}', $replace, $dom->saveHTML()); 
var_dump($newHTML); 

私はなぜ尋ねることはできますか?

+0

私はコンテンツ管理システムを作成しようとしています。これまで私は自分のサイトでタグの情報をコピーし、それをtextAreaにエコーしました。私はこれをPHPページに送り、情報ページを新しい情報に置き換えます。私は車輪を再発明するかもしれないように感じるが、それは私の頭の中で意味がある。 – DaBritishyankee

+0

だから、永続性はどうですか?私はあなたがデータベースを使用してそれを取る?これはなぜそれをポストして保存する 'textarea'のものをエコーするのですか? – kasimir

+0

それは数ヶ月後で、私はちょうどこのポストを確認しました。たくさんの仕事の後、私は最終的にこれをFy-のおかげで働かせました。しかし、それ以来私は別のサイトを作っていましたが、代わりにMYSQLデータベースを使用しました。そんなに簡単!テンプレート内のテキストを置き換えることで、動的ページごとにまったく新しいファイルを作成していましたが(私は今なぜ自分自身に尋ねます)、MYSQLはこれをもっと簡単にします。まあ、最後はうまくいった。学んだ教訓。 – DaBritishyankee

関連する問題