Jörg: Regular Expressions: Elegantere Lösung möglich?

Beitrag lesen

Hi, ich hab folgendes Problem:
In mehreren längeren Textdokumenten tauchen Namen auf, die
ersetzt werden sollen. Aber nur dann, wenn sie innerhalb des tags
<p class="txt4"> ... </p>
auftauchen.
Ansonsten sollen die Namen unverändert bleiben.
Innerhalb des tags <p class="txt4"> ... </p> können die Namen
keinmal, einmal oder auch mehrmals stehen.

Die einfache Ersetzungsfunktion
$text =~ s/$suchb/$ersatz/g;
geht nicht, weil $suchb in $text nur innerhalb der Zeichenkette
<p class="txt4">.*?</p>
ausgetauscht werden soll.

Bislang behelfe ich mich mit einer while-Schleife. Das funktioniert auch, aber es erscheint mir wenig elegant und auch zeitaufwändig:

while ($text =~ /<p class="txt4">.*?$suchbegriff.*?</p>/) {
 $text =~ /<p class="txt4">(.*?)</p>/;
 my $korr = $1;
 $korr =~ s/$suchb/$ersatz/g;
 $text =~ s/<p class="txt4">.*?$suchb.*?</p>/<p class="txt4">$korr</p>/;
}

Gibt es eine elegantere Lösung?