ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1355
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    DrOverflow ist offline Mitglied Gold
    Registriert seit
    May 2004
    Ort
    Vienna
    Beiträge
    185
    Hallo Leute!

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

    Code :
    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?!

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

    lg Dc
     
    Ein kluger Mensch macht nicht alle seine Fehler alleine, sondern er gibt auch anderen eine Chance.

  2. #2
    renee ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Beiträge
    332
    Das sammelt alles bis zum ersten "=" und alles danach...

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

    Code :
    1
    2
    3
    4
    
    ~/entwicklung 61> perl key_value.pl 
    Key: Key -- Value: Value
    Key: Hallo -- Value: Test
    Key: Dies -- Value: ist=ein=Test


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

    Code :
    1
    2
    3
    4
    5
    
    my @texte = ('Key=Value', 'Hallo=Test', 'Dies=ist=ein=Test');
    for(@texte){
        my ($key,$value) = split /=/,$_,2; # teile am ersten "="
        print "Key: $key -- Value: $value\n";
    }

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

  3. #3
    DrOverflow ist offline Mitglied Gold
    Registriert seit
    May 2004
    Ort
    Vienna
    Beiträge
    185
    Vielen Dank für deine Hilfe, renee!

    lg Dc
     
    Ein kluger Mensch macht nicht alle seine Fehler alleine, sondern er gibt auch anderen eine Chance.

Ähnliche Themen

  1. [VBS]Regular Expression
    Von Dark Ranger im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 19.10.07, 09:59
  2. regular expression
    Von jenno im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 07.09.06, 11:32
  3. Regular Expression
    Von time-master im Forum PHP
    Antworten: 7
    Letzter Beitrag: 29.01.06, 15:22
  4. regular expression
    Von hudo im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 26.08.04, 16:37
  5. Regular Expression
    Von Norbert Eder im Forum PHP
    Antworten: 4
    Letzter Beitrag: 28.04.04, 12:24