2012-01-22 11 views
1

可能性の重複:上記のようにHTMLコンテンツの文字列を考えると
How to parse and process HTML with PHP?HTML断片のX段落の後に文字列を挿入するには?

$content = " 
<p>This is the first paragraph</p> 
<p>This is the second paragraph</p> 
<p>This is the third paragraph</p>"; 

、私はN番目の段落タグの後に挿入を行う必要があります。

コンテンツを解析し、段落2の後に「hello world」などのテキストの文字列を挿入するにはどうすればよいですか?

+1

[HTMLを解析するために正規表現を使用しないでください](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454) !! –

+0

@JosephSilber:私は丁寧にどこにでも掲示を停止するように要求します。それは[事実上正しい](http://stackoverflow.com/a/4234491/345031)でも非常に[有益な](http://meta.stackexchange.com/a/73168/148103)でも、人々は明らかにそうではありません話題以外の冗談を読んでください。 – mario

答えて

5

あなたの文字列のHTML構造について確認している場合は、コールバックの静的変数で見段落をカウントすることができます。

$content = preg_replace_callback('#(<p>.*?</p>)#', 'callback_func', $content); 

function callback_func($matches) 
{ 
    static $count = 0; 
    $ret = $matches[1]; 
    if (++$count == 2) 
    $ret .= "<p> Additional paragraph</p>"; 
    return $ret; 
} 

この解決策は再入可能ではなく、単なる概念であることに注意してください。

+0

+1解説対コメント:)かなり簡単に見えます。それを今チェックアウトする。 – RegEdit

+1

答えは、以下のexplode | implodeの答えよりも速くなるか遅くなるでしょうか? – Banago

-3

関数は(str_replaceを助けることができる)

http://php.net/manual/es/function.str-replace.php

<? str_replace('<p>This is the second paragraph</p>','<p>This is the second paragraph</p> hello world', $content);?> 
+0

これはOPにどのように役立ちますか? – PeeHaa

+0

@HoeHoeHoe、このコードはあなたが尋ねたことを行います、おそらく私は理解していません –

+0

@del_dan第2段落が他の文字列である場合はどうなりますか?あなたはいつもそうなると思ったようですね。これはRegEditの意図ではなかった第2段落です。 – beam022

5

PHP explodeおよびimplodeの機能を使用できます。ここではコンセプトです:

$content = " 
<p>This is the first paragraph</p> 
<p>This is the second paragraph</p> 
<p>This is the third paragraph</p>"; 

$content_table = explode("<p>", $content); 

これは値で$content_tableを作成します。

Array ([0] => [1] => This is the first paragraph 
[2] => This is the second paragraph 
[3] => This is the third paragraph 
) 

今、あなたはあなたが行うことができる。例えば、段落2用$content_table[2]を使用して、あなたがしたいものは何でも変更することができます。

$content_table[2] .= "hello world!"; 

完了したら、テーブルを再度文字列に変換してください:

$content = implode($content_table, "<p>"); 
+1

ベストアイデア/答え。パフォーマンスを大幅に節約し、信頼性の高い作品!ありがとう – nicmare

関連する問題