1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Regular Expression

Dieses Thema im Forum "CGI, Perl, Python, Ruby, Power Shell" wurde erstellt von DrOverflow, 17. Januar 2007.

  1. DrOverflow

    DrOverflow Erfahrenes Mitglied

    Hallo Leute!

    Muss ein Projekt, welches in Perl geschrieben ist, überarbeiten, und bin dabei auf folgenden mysteriösen Ausdruck gestoßen:

    Code (Text):
    1. my $pattern = '^([^\=]+)\=(.*)$';
    Ich weiß zwar, wofür die REs gut sind und was sie bewirken - aber ich tu mir schwer beim Entschlüsseln.

    Was bewirkt diese RE?! :confused:

    Wär super, wenn mir jemand weiterhelfen könnte - danke!

    lg D;-]c
  2. renee

    renee Erfahrenes Mitglied

    Das sammelt alles bis zum ersten "=" und alles danach...

    Code (Text):
    1. #!/usr/bin/perl
    2.  
    3. use strict;
    4. use warnings;
    5.  
    6. my $pattern = '^([^\=]+)\=(.*)$';
    7.  
    8. my @texte = ('Key=Value', 'Hallo=Test', 'Dies=ist=ein=Test');
    9. for(@texte){
    10.     my ($key,$value) = $_ =~ /$pattern/;
    11.     print "Key: $key -- Value: $value\n";
    12. }
    13.  
    Code (Text):
    1. ~/entwicklung 61> perl key_value.pl
    2. Key: Key -- Value: Value
    3. Key: Hallo -- Value: Test
    4. Key: Dies -- Value: ist=ein=Test

    Aber um ehrlich zu sein, sollte man das besser mit split machen (schneller, speicherschonender, lesbarer)

    Code (Text):
    1. my @texte = ('Key=Value', 'Hallo=Test', 'Dies=ist=ein=Test');
    2. for(@texte){
    3.     my ($key,$value) = split /=/,$_,2; # teile am ersten "="
    4.     print "Key: $key -- Value: $value\n";
    5. }
    6.  
    Wenn Du mal wieder eine RegEx erklärt haben möchtest und Du möchtest nicht erst auf Antwort warten, kannst Du auch das Modul YAPE::Regex::Explain verwenden...

    Code (Text):
    1. The regular expression:
    2.  
    3. (?-imsx:^([^\=]+)\=(.*)$)
    4.  
    5. matches as follows:
    6.  
    7. NODE                     EXPLANATION
    8. ----------------------------------------------------------------------
    9. (?-imsx:                 group, but do not capture (case-sensitive)
    10.                          (with ^ and $ matching normally) (with . not
    11.                          matching \n) (matching whitespace and #
    12.                          normally):
    13. ----------------------------------------------------------------------
    14.   ^                        the beginning of the string
    15. ----------------------------------------------------------------------
    16.   (                        group and capture to \1:
    17. ----------------------------------------------------------------------
    18.     [^\=]+                   any character except: '\=' (1 or more
    19.                              times (matching the most amount
    20.                              possible))
    21. ----------------------------------------------------------------------
    22.   )                        end of \1
    23. ----------------------------------------------------------------------
    24.   \=                       '='
    25. ----------------------------------------------------------------------
    26.   (                        group and capture to \2:
    27. ----------------------------------------------------------------------
    28.     .*                       any character except \n (0 or more times
    29.                              (matching the most amount possible))
    30. ----------------------------------------------------------------------
    31.   )                        end of \2
    32. ----------------------------------------------------------------------
    33.   $                        before an optional \n, and the end of the
    34.                            string
    35. ----------------------------------------------------------------------
    36. )                        end of grouping
    37. ----------------------------------------------------------------------
    38.  
  3. DrOverflow

    DrOverflow Erfahrenes Mitglied

    Vielen Dank für deine Hilfe, renee! :D

    lg D;-]c

Diese Seite empfehlen