Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]370[/thread]

letzte Zeichenfolge in einer Variablen ersetzen



<< >> 8 Einträge, 1 Seite
oruebe
 2004-08-27 19:55
#3583 #3583
User since
2004-07-09
46 Artikel
BenutzerIn
[default_avatar]
Hallo mal wieder,

habe mal wieder eine Frage: Ich habe in einer Variablen den HTML-Code für eine ganze Tabelle. Jetzt möchte ich ganz hinten an die Tabelle eine weitere Zeile einfügen. Dafür würde ich gerne die letzte Zeichefolge "</TR>" gegen den Quelltext für eine neue Zeile ersetzen ("<TR><TD>...</TD></TR>").

Ich habe in der Variablen mehrere Tabellenzeilen, also mehrere "</TR>". Wie mache ich es, dass nicht das erste sondern das letzte ersetzt wird?

Danke mal wieder :-)

Oliver
oruebe
 2004-08-27 20:23
#3584 #3584
User since
2004-07-09
46 Artikel
BenutzerIn
[default_avatar]
ach ja... in einem Fall brauche ich auch das VORletzte... :-)
murphy
 2004-08-27 20:58
#3585 #3585
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Auf jeden Fall könntest du die Substitution einfach auf einen Substring des Strings, welcher die Tabelle enthält, anwenden. Also etwas in der Art:
Code: (dl )
substr($tabelle, length($tabelle) - 10) =~ s/</tr>/</tr><tr><td>blabla</td></tr>/;

Aber vielleicht gibt es auch noch eine geschicktere Variante?!?
When C++ is your hammer, every problem looks like your thumb.
oruebe
 2004-08-27 21:15
#3586 #3586
User since
2004-07-09
46 Artikel
BenutzerIn
[default_avatar]
was bedeutet die 10 dabei genau?
bedeutet das, dass die letzten 10 Zeichen des gesammten Strings auf "<TR>" durchsucht werden?
Alexfo85
 2004-08-27 23:20
#3587 #3587
User since
2004-08-18
20 Artikel
BenutzerIn
[default_avatar]
substr($zu_durchsuchende_variable, $startpunkt , $ende, $ersetzungs_text)
$ende, $ersetzungs_text sind optional

length($tabelle) - 10 => letzen 10 zeichen werden durchsucht auf </tr> wobei der / mit nem \ maskiert werden muss, also immer \/ schreiben...

Code: (dl )
1
2
$text =~ /<\/TR>$/blalbalba/; # $ steht für das letze vorkommen in der Zeichenkette... 
                                        # optional noch neen i nach dem letzen /, damit er groß und kleinschreibung ingnoriert


Lies dir auf jeden fall mal das hier durch, das erklärt so einiges ;)

Selfhtml -> RegEx\n\n

<!--EDIT|Alexfo85|1093634962-->
renee
 2004-08-28 00:49
#3588 #3588
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
$ende ist etwas unklar. Es ist nämlich nicht die Stoppposition, sondern die Länge...

Bsp:
Code: (dl )
1
2
3
my $var = 'Dies ist ein Test!';
my $test = substr($var,13,4);
print $test; # Ausgabe: Test

Die 4 ist also nicht die Stoppposition (das wäre das s), sondern die Länge (Test ist 4 Zeichen lang)!

siehe perldoc -f substr
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2004-08-28 00:56
#3589 #3589
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Alexfo85,27.08.2004, 21:20]Lies dir auf jeden fall mal das hier durch, das erklärt so einiges ;)

Selfhtml -> RegEx[/quote]
Ich rate auch dazu, mal perldoc perlre zu lesen und vielleicht mal den Kurs auf http://regenechsen.de
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2004-08-28 16:56
#3590 #3590
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=murphy,27.08.2004, 18:58]Auf jeden Fall könntest du die Substitution einfach auf einen Substring des Strings, welcher die Tabelle enthält, anwenden. Also etwas in der Art:
Code: (dl )
substr($tabelle, length($tabelle) - 10) =~ s/</tr>/</tr><tr><td>blabla</td></tr>/;

Aber vielleicht gibt es auch noch eine geschicktere Variante?!?[/quote]
Deine Substitution funktioniert so nicht, wegen der Slashes.
Wenn Suchmuster oder Ersetzung Schraegstriche enthalten, sollte man andere Begrenzer nehmen, z.B.
Code: (dl )
s~</tr>~</tr><tr><td>blabla</td></tr>~

oder
Code: (dl )
s{</tr>}{</tr><tr><td>blabla</td></tr>}


Grundsaetzlich ist diese Vorgehensweise aber ein grauslicher Hack, weil man wissen oder erraten muss, wie lange die letzte / die letzten beiden Tabellenzeilen im HTML-Quellcode sind. Auch sollte man sich darueber im Klaren sein, dass das haendische Parsen von HTML mit einfachen Regexen ein "Bad Thing" ist. (Extrembeispiel: Man stelle sich eine Passage wie foo<!-- </tr> -->bar im Text der Tabelle vor.)

Anzuraten sind eigentlich nur ordentliche Parser wie CPAN:HTML::Parser oder - hier wahrscheinlich besser - CPAN:HTML::TreeBuilder.
<< >> 8 Einträge, 1 Seite



View all threads created 2004-08-27 19:55.