Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Perl, split mit Regex in gequotetem String

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.08.2003
    Beiträge
    5

    Perl, split mit Regex in gequotetem String

    Hallo!

    Jemand eine Idee, wie ich den String

    0 172 "bla" "honkitonk lala" "schlabber"

    in die 5 Teile

    0
    172
    "bla"
    "honkitonk lala"
    "schlabber"

    splitten könnte? Ich bin mir nicht sicher, ob sich "splitte an diesem Space, wenn sich davor im String nicht eine ungerade Anzahl an Whitespaces befindet" ausdrücken läßt. Bin für clevere Ideen offen.

    AD!

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    das Problem ist klar - aber der Satz darunter wirklich nicht

    bitte nochmal für mich

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.08.2003
    Beiträge
    5
    Die einzige Regel, die für alle Spaces gilt, an denen ich splitten will, ist folgende:

    1. Der Parser erreicht das Space an Stelle X im String
    2. Zähle die Anführungszeichen von Stelle 1 bis Stelle X-1
    3. Ist diese Zahl gerade, befinde ich mich außerhalb eines gequoteten Strings und möchte an diesem Space umbrechen

    AD!

  4. #4
    Registrierter Benutzer
    Registriert seit
    15.08.2003
    Beiträge
    79

    Cool Es geht auch ohne split.

    Code:
    my $str = "0 172 \"bla\" \"honkytonk lala\" \"schlaber\"";
    
    while ($str =~ /(\d*\s)|(\"\w*(\s\w*)*\")/g)
    {
        if (not defined $1) {
            print "$2\n";
        } else {
            print $1."\n";
        }
    }

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.08.2003
    Beiträge
    5
    Hallo!

    Danke Trollslayer. Scheinbar ein Kommunikationsproblem. Ich wollte eine abstrakte Lösung. Das Problem ist das allgemeine Splitten beliebiger Strings unter der Prämisse, Whitespaces innerhalb eines gequoteten Strings zu ignorieren.

    AD!

  6. #6
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    0 172 "bla" "honkitonk lala" "schlabber"

    ich würde folgendes tun:
    1. an den Hochkommas splitten
    damit hast du

    #0 0 172
    #1 bla
    #2
    #3 honkitonk lala
    #4
    #5 schlabber

    2. in den ungeraden Array-elementen die leerzeichen ersetzen und den string mit hochkommas wieder zusammenbauen

    #0 0 172
    #1 bla
    #2
    #3 honkitonk@lz@lala
    #4
    #5 schlabber

    0 172 "bla" "honkitonk@lz@lala" "schlabber"

    Dann kannst du 3. ohne verluse am leerzeichen splitten.

    4. wird dann im resulierenden Array einfach @lz@ durch leerzeichen ersetzt

    ps: bei den regexp breche ich mir auch jedesmal die finger, deshalb hier nur die vorgehensweise...

    edit: geht wahrscheinlich einfacher, aber das hier funxt:
    PHP-Code:
    $str="0 172 \"bla\" \"honkitonk lala\" \"schlabber\"";
    my @elm=split("\"",$str);
    $str="";
    for(
    my $i=0;$i<@elm;$i++) {
        
    $elm[$i]=~ s/\s/\@LZ\@/if($i ==1);
        
    $str=$str.$elm[$i]."\"";
        }
    @
    elm=split(" ",$str);
    for(
    my $i=0;$i<@elm;$i++) {
        
    $elm[$i]=~ s/\@LZ\@/ /;
        print 
    $elm[$i]."\n";
        } 
    Geändert von elrond (28-08-2003 um 14:55 Uhr)
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  7. #7
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    Re: Perl, split mit Regex in gequotetem String

    Jetzt ists klar.

    Hab das gelesen:

    Original geschrieben von Angels Death
    "splitte an diesem Space, wenn sich davor im String nicht eine ungerade Anzahl an Whitespaces befindet"
    und dann hä?

    Whitespaces sind doch Tabs, Leerschläge und Newline-Zeichen (und Carriage-Return für die dies Brauchen )

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  8. #8
    Registrierter Benutzer
    Registriert seit
    28.08.2003
    Beiträge
    5
    Hab' ja auch Bockmist geschrieben, müßte natürlich "Anführungszeichen" (Shift 2) heißen

    AD!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •