perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




11.02.2012 / 07:11

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragRegulä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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-