reg. Expr, jetzt versteh ich gar nichts mehr ?
xNeTworKx
- perl
#include <h.allo>
Ich hab da ein kleines Logikproblem. Ich versuche einfach beiliebig viele Zeichen zwischen 2 "tags" zu extrahieren, aber ich weis nicht warum er keine Übereinstimmung findet. Ich versteh die Logik hierbei nicht. Ich teste am folgenden Text.
blablabla bnlabvlsgt dgdrdrgt r
gtdrgz drgdrg dfg g
xdrgh drhz drh drghdrhdrhdrhd
[codeabschnitt]
#!/usr/bin/perl
use strict;
print "Hallo World\n";
[/codeabschnitt]
bzuvguftz ugfhrfh d h db
[codeabschnitt]
#!/usr/bin/perl -w
print "neuer Code";
[/codeabschnitt]
Ich will im Endeffekt mal alle Elemente zwischen [codeabschnitt] und [/codeabschnitt] haben. An und für sich kein Problem. Nur er findet diese beioden Tags nicht, wenn sie zusammen in einem Ausdruck stehen?
Was ich bis jetzt probiert habe: (das Ganze geschieht in einer Subroutine)
Ich kann den ganzen Text mit print $text; ausgeben.
Ich finde [codeabschnitt] für sich, und auch [/codeabschnitt], aber
while ($text =~ /[codeabschnitt].+?[/codeabschnitt]/g) {
print "Ja\n";
}
funktioniert nicht.
Das ist ja das Logikproblem, daß ich dabei habe, weil er doch das Ganze als einen skalaren Wert sieht und ich bis jetzt immer so vorgegangen bin, und es bis jetzt immer funktioniert hat.
Wenn ich vor dem Regulären Ausdruck print $text; angebe, bekomme ich den ganzen Text aufgelistet, und zwar so :
blablabla bnlabvlsgt dgdrdrgt r gtdrgz drgdrg dfg g xdrgh drhz drh drghdrhdrhdrhd [codeabschnitt] #!/usr/bin/perl use strict; print "Hallo World\n"; [/codeabschnitt] bzuvguftz ugfhrfh d h db [codeabschnitt] #!/usr/bin/perl -w print "neuer Code"; [/codeabschnitt]
DH, Es kann nur daran liegen, daß ihm das .+? nicht gefällt. Ich habs aber auch schon auf die Harte Tour versucht, und zwar so :
while ($text =~ /[codeabschnitt].*[/codeabschnitt]/g) {
print "Ja\n";
}
Er findet aber auch nichts ?
Ich hab auch versucht mit "if" statt "while" zu suchen, aber nichts.
Wer kann mir sagen, warum er keine Übereinstimmung findet ? Ich bin nämlich mit meiner Logik am Ende.
Wenn ich [codeabschnitt]blablablabla[/codeabschnitt] in einer Zeile stehen habe, findet er es. Aber wieso ? Ich bin im skalaren Kontext
Wenn ich [codeabschnitt]blablablabla[/codeabschnitt] in einer Zeile stehen habe, findet er es. Aber wieso ? Ich bin im skalaren Kontext
man perlop
man perlre
s-Flag und m-Flag für Regular Expressions
RTFM ...
Alexander
s-Flag und m-Flag für Regular Expressions
Was soll das bringen ? Ob ich jetzt m// oder // angebe, ist doch egal. Das Ergebnis ist das gleiche.
Hi,
s-Flag und m-Flag für Regular Expressions
Was soll das bringen ? Ob ich jetzt m// oder //
angebe, ist doch egal. Das Ergebnis ist das gleiche.
das, was Du da meinst, ist ja auch kein "Flag" ...
Viele Grüße
Michael
s-Flag und m-Flag für Regular Expressions
Was soll das bringen ? Ob ich jetzt m// oder // angebe, ist doch egal. Das Ergebnis ist das gleiche.
Operator vorne, Flag hinten!
$something=~s/bla/fasel/gs;
Ersetzt bla durch fasel *g*lobal und behandelt $someting als *s*ingle-line, d.h. \r und \n werden als ganz normale Zeichen behandelt.
RTFM!
Alexander
funktioniert es nur dann, wenn ich vor der while Schleife $text =~ s/\n/<br>/g; angebe ?
Hi,
funktioniert es nur dann, wenn ich vor der while Schleife $text =~ s/\n/<br>/g; angebe ?
wenn der s (Single-Line)-Switch gesetzt ist, behandelt Perl den gesammten Text als eine Zeile, sprich "." matcht auch auf "\n".
Wenn also ein "\n" zwichen deinen "Tags" ist, und "s" nicht gesetzt ist, wirst du nicht glücklich. Durch "$text =~ s/\n/<br>/g;" umgehst du das Problem, da $text dann keine "\n"'s mehr enthällt...
Gruss
Christian
P.S.: hättest du die angegebenen Dokus *richtig* gelesen, wärst du auch selbst draufgekommen...
Hallo,
achso ist das gemeint mit s und m :-) Auf jeden Fall hat das jetzt eine Menge probleme gelöst, danke =)