Hallo. Ik ben redelijk nieuw in php. Ik heb onderstaande php script wat goed werkt. De oude tekst die zich bevindt in test.html wordt perfect vervangen voor de nieuwe middels de preg_replace functie. echter nu loop ik tegen een ander probleem aan. Ik heb namelijk een class toegevoegd in de html code dus als volgt:

<h1 class="check1>Oude tekst hier</h1>

Weet iemand wat nu de juiste synthax is in $search om de tekst toch te vervangen via de preg_replace functie?

Hieronder dan de php:

<?php

$myfile = "test.html"; // or .php
$string = file_get_contents($myfile);

$search = "/[^<h1>](.*)[^<\/h1>]/";
$replace = "Here my new text";



$content = preg_replace($search,$replace,$string);
file_put_contents($myfile, $content);
?>
Iedereen super bedankt voor al jullie reacties. Ik ben verder geholpen en kan nu lekker verder met mijn cms systeem.
Interessant Ivo! Dat maakt het een stuk duidelijker.

Jij gebruikt $1 en $2. Als ik het goed begrijp, worden de eerste en laatste groep in de beginpost juist niet gecaptured/vervangen? Is er een speciale reden waarom jij dat wel doet (via $1 en $2)?
Dat is vooral omdat je anders die tags kwijt bent....

Vandaar mijn vraag ook helemaal bovenaan: dat script wat in de openingspost staat, vervangt alles door alleen die ene string. En aan het vangen van de tekst die tussen de H1-tags staat, heb je weinig: die tekst vervang je immers dus was het niet interessant om te weten wát er stond.

In principe zou je de sluitende /h1 hardcoded in de $replace kunnen zetten, maar op deze manier kun je $replace ook gebruiken als je hetzelfde met een h2 tag wilt uithalen.

>> dat script wat in de openingspost staat, vervangt alles door alleen die ene string.

Ah oké, ik dacht eigenlijk dat het script in de openingspost alleen de tekst tussen de <h1> en </h1> verving en dat de tags zelf gewoon bleven staan.
Bij mijn script bij de openingspost worden de tags ook niet vervangen. die blijven gewoon staan. alleen de tekst ertussen wordt vervangen.
Dat is inderdaad wat ik zei. Vandaar dat ik benieuwd ben waarom Ivo voor deze aanpak kiest.
oh ja sorry. verkeerd gelezen inderdaad.
dit is mijn test-script:
<?php

$string = ' <html> test <h1 class="ko">bar</h1> barfor <h1>hallo</h1> foobar </html>';

$search = "/[^<h1>](.*)[^<\/h1>]/";
$replace = "Here my new text";

$content = preg_replace($search,$replace,$string);

echo $content;
?>

als ik dat uitvoer dan is mijn output:

[centos@***~]$ php t2.php
Here my new text>[centos@***~]$

ja kloppt inderdaad. die werkt ook niet. had per abuis een verkeerde genomen. maar dankzij alle hulp hbe ik nu werkende scripts, waarmee ik op diverse manieren tekst kan aanpassen. Ik heb nu ook een form aangemaakt waarmee ik de ingevoerde tekst doorstuur naar een php die dan de oude tekst kan vervangen.
@Ivo

Ik had gisteren even zo getest:

<?php

$string = '<h1>Oude tekst hier</h1>';

$search = "/[^<h1>](.*)[^<\/h1>]/";
$replace = "Here my new text";

$content = preg_replace($search,$replace,$string);

echo $content;

?>
Resultaat: https://3v4l.org/0JBZB

Hier blijven de h1 tags staan. Vandaar dat ik het me afvroeg.

Reageren