Der folgende Beitrag wurde am 16. 08. 2008, 17:09 Uhr von Roger veröffentlicht.
Hi,
ich hab folgende Strings:X-A ca 1 19 101 10 1 a1f SMPL blabla
X-A ca 1 19 102 10 1 281 H-Test blabla
Ich möchte nun jede Zeile die nicht SMPL enthält herausfiltern.
So funktioniert es:if ($line =~ /[\w-]+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)/ && $line !~ /SMPL/)
{
print "$line => $1";
}
Meine Frage ist nun...
Warum geht es nicht so:if ($line =~ /[\w-]+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)\s+(?!SMPL)/ )
{
print "$line => $1";
}
Danke für Aufklärung.
ciao,
Roger
Der folgende Beitrag wurde am 16. 08. 2008, 17:51 Uhr von Beat veröffentlicht.
> Danke für Aufklärung.
Die zweite Weise kann die RE matchen, wenn zwei \s oder mehr vorhanden sind vor SMPL, weil die RE matchen kann \s gefolgt von \sSMP
Klar?
mfg Beat
--
Woran ich arbeite:
X-Torah
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der folgende Beitrag wurde am 16. 08. 2008, 23:40 Uhr von Roger veröffentlicht.
Hi,
> > Danke für Aufklärung.
>
> Die zweite Weise kann die RE matchen, wenn zwei \s oder mehr vorhanden sind vor SMPL, weil die RE matchen kann \s gefolgt von \sSMP
> Klar?
sorry, nein - ich blick nicht, was du meinst.
\s+ bedeutet doch 1-n und nicht 2-n, deshalb verstehe ich es nicht.
ciao,
Roger
Der folgende Beitrag wurde am 16. 08. 2008, 23:49 Uhr von Beat veröffentlicht.
Simpel
Mein String sei "xxYYYx"
gesucht wird das Muster /x+(?!YYY)/
das ist erfüllt mit "x" "xYY" "Yx"
weil "xYY" etwas ist das nicht "YYY" ist
mfg Beat
--
Woran ich arbeite:
X-Torah
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der folgende Beitrag wurde am 16. 08. 2008, 19:00 Uhr von seth_not@home veröffentlicht.
gudn tach!
> Warum geht es nicht so:
>
> if ($line =~ /[\w-]+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)\s+(?!SMPL)/ )
> {
> print "$line => $1";
> }
das kannst du selbst ganz einfach herausfinden:$_='X-A ca 1 19 101 10 1 a1f SMPL blabla';
print '>'.$&.'<' if /[\w-]+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)\s+(?!SMPL)/;"
# prints: >ca 1 19 101 10 1 a1f SMPL <
wenn's noch nicht klar ist:$_='X-A ca 1 19 101 10 1 a1f SMPL blabla';
print '>'.$1.'<' if /([\w-]+)\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)\s+(?!SMPL)/;"
# prints: >ca<
je nach genauem problem koennte es dir evtl. helfen, mit "^" einen anker beim stringbeginn zu werfen, also
/^[\w-]+.../
prost
seth
Der folgende Beitrag wurde am 16. 08. 2008, 20:54 Uhr von Erwin veröffentlicht.
Hi,
nett - wo kann ich etwas über $& nachlesen, habe auf die schnelle nichts gefunden.
Greetz
Erwin
Der folgende Beitrag wurde am 17. 08. 2008, 21:18 Uhr von seth veröffentlicht.
gudn tach!
> nett - wo kann ich etwas über $& nachlesen, habe auf die schnelle nichts gefunden.
in der bibel: perldoc perlre (abschnitt "capture buffers")
prost
seth
Der folgende Beitrag wurde am 16. 08. 2008, 23:58 Uhr von Roger veröffentlicht.
Hi,
> je nach genauem problem koennte es dir evtl. helfen, mit "^" einen anker beim stringbeginn zu werfen, also
> /^[\w-]+.../
Danke - der Anker hilft um mein Problem zu lösen.
Ich hab ehrlichgesagt noch nicht ganz verstanden warum $& mit Anker anderst ist als ohne - und zwar nur wenn ich (?!SMPL) einbaue - aber vielleicht kommt ja heute Nacht und mit Hilfe der perldoc noch die Erleuchtung.
ciao,
Roger
Der folgende Beitrag wurde am 17. 08. 2008, 21:15 Uhr von seth veröffentlicht.
gudn tach!
> > je nach genauem problem koennte es dir evtl. helfen, mit "^" einen anker beim stringbeginn zu werfen, also
> > /^[\w-]+.../
>
> Danke - der Anker hilft um mein Problem zu lösen.
> Ich hab ehrlichgesagt noch nicht ganz verstanden warum $& mit Anker anderst ist als ohne - und zwar nur wenn ich (?!SMPL) einbaue
$& ist bloss eine variable wie $1, $2, usw. siehe perldoc perlre. in $& steht der gesamte gematchte string. (soweit hast du's vermutlich bereits verstanden, ich sag's bloss sicherheitshalber.)
was der anker nun aendert, steht im perl-manual ganz gut beschrieben:
einfach in http://perldoc.perl.org/perlretut.html nach "anchor" suchen.
/foo(?!SMPL)/ sagt also nur: matche das erstbeste "foo", das dir ueber den weg laeuft und dem nicht der string "SMPL" folgt.
/foo(?!SMPL)/ wuerde also das zweite "foo" im string "barfooSMPLfoo" matchen.
prost
seth
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4