HTMLドキュメントを単なる文字列として扱わないでください。すでにお気づきのように、タグ/要素(およびそれらがどのようにネストされているか)はHTMLページで意味を持っているため、HTMLドキュメントの作成方法を知っているツールを使用する必要があります。これはDOMになります。
これが例です。最初に使用するHTML
$html = <<< HTML
<body>
<h1>Germany reached the semi finals!!!</h1>
<h2>Germany reached the semi finals!!!</h2>
<h3>Germany reached the semi finals!!!</h3>
<h4>Germany reached the semi finals!!!</h4>
<h5>Germany reached the semi finals!!!</h5>
<p>Fans in Germany are totally excited over their team's 4:0 win today</p>
</body>
HTML;
そして、これがアルゼンチンを幸せにするために必要な実際のコードです
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//*[self::h1 or self::h2 or self::p]');
foreach( $nodes as $node ) {
$node->nodeValue = str_replace('Germany', 'Argentina', $node->nodeValue);
}
echo $dom->saveHTML();
XPathクエリ呼び出しでコンテンツを置き換えるタグを追加するだけです。XPathを使用する代わりに、JavaScriptから知っているDOMDocument::getElementsByTagNameを使用することもできます。
$nodes = $dom->getElementsByTagName('h1');
実際、JavaScriptからそれを知っている場合、 DOMは実際にはW3Cによって定義され、多くの言語で実装されている言語に依存しないAPIであるため、さらに多くのことを知っているかもしれません。XPathの利点は、getElementsByTagName
明らかに、一度に複数のノードにクエリを実行できることです。欠点は、XPathを知っている必要があることです:)