|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Reguläre Ausdrücke
|
Seitenanfang |
Hi Leute, ich bins nochmal. Hab hier ein paar reguläre Ausdrücke mit denen ich einfach nicht zurecht komme. Ich hab mir schon die Dokumentationen dazu angeschaut; komm aber nicht weiter. Bitte helft mir bei den einzelen Abschnitten. Vielen Dank
$muster = '(\d)\.([^\D])'; $text = 4.12;if (@zahlen = $text =~ m/$muster/) {print "(1) wahr: @zahlen\n";} else {print "(1) falsch: @zahlen\n";} if (@zahlen = $text !~ m/$muster/) {print "(2) wahr: @zahlen\n";} else {print "(2) falsch: @zahlen\n";} $text = 4.0; if (@zahlen = $text =~ m/$muster/) {print "(3) wahr: @zahlen\n";} else {print "(3) falsch: @zahlen\n";} if (@zahlen = $text !~ m/$muster/) {print "(4) wahr: @zahlen\n";} else {print "(4) falsch: @zahlen\n";}
Datum: 04.01.2005-11:23

|
re: Reguläre Ausdrücke
|
Seitenanfang |
| Hallo, also ich sehe nur einen regulären Ausdruck. Dabei steht \d für irgendeine Ziffer, gefolgt von einem Punkt und nicht keine Ziffer, also auf deutsch eine Ziffer. Zusammen: Ziffer-Punkt-Ziffer Gruß spli
Datum: 04.01.2005-17:12

|
re: Reguläre Ausdrücke
|
Seitenanfang |
ja hallo, also das (@zahlen = $text !~ m/$muster/) wird wohl nie funktionien. Der wert von($text =~ m/$muster/) ist 1 oder 0, und ein einzelner wert, niemals ein @Feld. Also insgesamt koenntest Du schreiben: if ($text !~ m/$muster/) { @zahlen = ($1,$2); print "wahr: @zahlen\n"; } else { print "falsch!\n";} Aber, ..., bei einer alten Perl Version verschluckt er sich vielleicht an dem (\d), das nicht direkt auf der Zeile ($text !~ m/(\d)\.([^\D])/) sichtbar ist, sondern in $muster versteckt wurde. Gruss
Datum: 04.01.2005-17:36

|
re: Reguläre Ausdrücke
|
Seitenanfang |
Hier nochmal meine konkreten Fragen: Das erste Ergebnis check ich ja noch: (1) Das Ergebnis der ersten Klammer ist 4 und das Ergebnis der zweiten Klammer ist 1. ABER die anderen drei Anweisungen versteh ich nicht. (2) wahr: (warum wahr aber ohne Inhalt) (3) falsch: (warum falsch) (4) wahr: 1 (warum eins)[code] $muster = '(\d)\.([^\D])'; $text = 4.12; if (@zahlen = $text =~ m/$muster/) {print "(1) wahr: @zahlen\n";} else {print "(1) falsch: @zahlen\n";} # wahr: 4 1 if (@zahlen = $text !~ m/$muster/) {print "(2) wahr: @zahlen\n";} else {print "(2) falsch: @zahlen\n";} # wahr: $text = 4.0; if (@zahlen = $text =~ m/$muster/) {print "(3) wahr: @zahlen\n";} else {print "(3) falsch: @zahlen\n";} # falsch: if (@zahlen = $text !~ m/$muster/) {print "(4) wahr: @zahlen\n";} else {print "(4) falsch: @zahlen\n";} # wahr: 1 [/code)
Datum: 05.01.2005-11:36

|
re: Reguläre Ausdrücke
|
Seitenanfang |
| ... aeh .... ich sage es gerne noch einmal: if (@zahlen = $text =~ m/$muster/) ist vom Ansatz her verkehrt und wird immer falsche oder unvorhersehbare ergebnisse liefern. Das Ding mutiert zu if ((@zahlen = $text ) =~ m/$muster/)) # ganz passabel, aber @zahlen hat das originale '4.12' darin. oder zu if (@zahlen = ( $text =~ m/$muster/)) # kroddefalsch, @zahlen enthaelt 0 oder 1 Ich hoffe die erlaeuterung hilft und wird verstanden.
Datum: 05.01.2005-14:38

|
re: Reguläre Ausdrücke
|
Seitenanfang |
| @LaoFuZe: Da liegst Du leider falsch siehe perldoc perlrequick: In list context, a match "/regex/" with groupings will return the list of matched values "($1,$2,...)". So we could rewrite it as ($hours, $minutes, $second) = ($time =~ /(\d\d):(\d\d):(\d\d)/);
statt ($hours, $minutes, $second) kannst Du auch einfach @array schreiben!
Datum: 05.01.2005-15:11

|
|

|

|

|
 |

|

|
|