0

通常の置換または正規表現を使用して、2番目に見つかった結果のみを置換して、文字列を置換するにはどうすればよいですか

<div id="fb-root"></div>
codes

<div id="fb-root"></div>

aas
<div id="fb-root"></div>
ss
<div id="fb-root"></div>

期待される結果は

<div id="fb-root"></div>
codes


aas
ss

2 番目の fb-root div から最後までを削除する必要があります。

助けてくれてありがとう。

4

3 に答える 3

1

これを試して:

$str = 'STRING HERE';
$result = preg_replace_callback('@<div\s+id="fb-root"></div>@', function(){
    static $count = 0;
    if(++$count > 1){
        return null;
    }else{
        $args = func_get_arg(0);
        return $args[0];
    }
}, $str);
于 2013-01-13T08:43:01.223 に答える
1

おそらくもっと良い方法があると思いますが、最初のものにプレースホルダーを使用し、残りを置き換えてから、プレースホルダーを元に戻してはどうでしょうか?

$full_text = file_get_contents($filename);
$text_to_replace = '<div id="fb-root"></div>';
$placeholder = '__PLACEHOLDER__';

$full_text = str_replace($text_to_replace, $placeholder, $full_text, 1);
$full_text = str_replace($text_to_replace, '', $full_text);
$full_text = str_replace($placeholder, $text_to_replace, $full_text);

ここで重要なのは、 への最初の呼び出しの 4 番目のパラメーターstr_replaceです。これは、検索されたテキストの 1 つのインスタンスのみを置換するように関数に指示します。最初のインスタンスのみをプレースホルダーに置き換え、2 回目の呼び出しで残りのすべてのインスタンスを削除し、3 回目の呼び出しでプレースホルダーを元のテキストに置き換えます。

于 2013-01-13T08:40:11.740 に答える
0

次のようなことができます。

$str = "...";

$needle = '<div id="fb-root"></div>';
$len = strlen($needle);
$pos = strpos($str, $needle) + $len; // skip the first occurance
while (($pos = strpos($str, $needle, $pos)) !== false)
    $str = substr($str, 0, $pos) . substr($str, $pos + $len);// remove the needle
于 2013-01-13T09:13:01.217 に答える