preg_split() regex

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_split() regex

    Hallo,
    ich moechte einen string in ein array verwandeln, dabei moechte ich das bei jedem ; mit einer zahl dahinter ein neues arrayelement anfeangt.
    waere es dann auch noch moeglich das in den arrayelementen noch die zahl enthalten ist die hinter dem ; steht (also das teile des trennoperators gleichzeitig arrayelement werden)?

    prog:
    ------------------------------------------
    $str ="1'abc';2'def';3'ghi';4'jkl';5'mno';

    $testarray = preg_split("bekomm ich nicht hin hier!",$str);

    foreach($testarray as $i)
    {
    echo "i: ".$i."<BR>";
    }
    -----------------------------------------
    so das die ausgabe dann

    i: 1'abc'
    i: 2'def'
    i: 3'ghi'
    i: 4'jkl'
    i: 5'mno'

    waere. ich hab es mit ";([1-7]){1}" und aehnlichem versucht und es leider nicht hinbekommen!

    Danke.

    Ps: es ist wichtig das der trennparamenter ; mit ner zahl dahinter ist und nicht nur ; alleine!
    Zuletzt geändert von funkyflixx; 24.06.2003, 16:34.

  • #2
    wie wärs damit:
    Code:
    $str ="1'abc';2'def';3'ghi';4'jkl';5'mno'";
    $testarray = preg_split("#;([1-7]{1})#",$str);
    
    for($i=0;$i<count($testarray);$i++)
    {
    echo "i: ".$i." ".$testarray[$i]."<BR>";
    }
    Kissolino.com

    Kommentar


    • #3
      naja,
      leider ist mein string schon ein bischen variable
      sollte also fuer
      z.B:
      --------------------------
      $str ="1'abc';4'jkl';5'mno'";
      mit ergebnis:

      i:1'abc'
      i:4'jkl'
      i:5'mno'
      ----------------------------
      auch funktionieren......
      geht aber so nicht!
      danke trotzdem fuer deine bemuehnungen!

      Kommentar


      • #4
        solange dein string so aussieht, wie die beiden beispiele,
        reicht auch ein explode() mit dem trennzeichen ";"
        Kissolino.com

        Kommentar


        • #5
          ABER SIE SEHEN NICHT IMMER SO AUS!


          sorry, aber stellt euch einfach vor das

          $str = "1'"a'aaa;aa';2'bbb;b;b';5'c;ccc'"

          und dann koenne a,b,c noch sonst welche sondzezeichen sein,und die ausgabe soll immer noch:


          i: 1'"a'aaa;aa'
          i: 2'bbb;b;b'
          i: 5'c;ccc'

          sein.

          darum brauch ich ja die regex!!!!!
          das einzige was in diesen sonderzeichen und sonst welche nicht einhalten ist (als regex ausgedrueckt): ";([1-7])" oder "#;([1-7]{1})#" oder wie man das sonst noch darstellen kann!

          danke fuer antworten
          Zuletzt geändert von funkyflixx; 24.06.2003, 18:03.

          Kommentar


          • #6
            vielleicht versteh ich das problem wirklich nicht so richtig
            aber noch brauchst du keine regex:
            Code:
            $str ="1'abc';7'def';3'ghi';4'jkl';5'mno'";
            $str ="1'abc';4'jkl';5'mno'";
            $str = "1'\"a'aaa;aa';2'bbb;b;b';5'c;ccc'";
            $testarray = explode("';",$str);
            
            for($i=0;$i<count($testarray);$i++)
            {
            if($i == count($testarray)-1)
            {
            echo $i.": ".$testarray[$i]."<BR>";
            }
            else
            {
            echo $i.": ".$testarray[$i]."'<BR>";
            }
            }
            kommentier die einzelnen $str aus und probiers.
            Kissolino.com

            Kommentar


            • #7
              nicht schlecht!
              nur leider ist das mit der stringflexibilitaet sogar so weit...

              $str = "1;2'dfd','sdf';sd';3;4'felix'"

              ich hab jetzt aber mitlerweile eine eigene (leider sehr komplizierte loesung)

              ----------------------------------------
              $article_array = preg_split("(;[1-7])",$article_str);
              preg_match_all("(;[1-7])",$article_str,$matches,PREG_OFFSET_CAPTURE);

              for($i=1;$i<count($article_array);$i++)
              {
              if(strlen($article_array[$i])==0)
              {
              $article_array[$i] = substr($matches[0][$i-1],1);
              }
              else
              {
              $pos = strpos($article_str,$article_array[$i]);
              $article_array[$i] = substr($article_str,$pos-1,1).$article_arra[$i];
              }
              }
              ----------------------------------------

              wer lust hat kann sich es mal reinziehen, wer nicht verpasst auch nichts grosses (ist eher ein gewurschtel glaub ich)

              danke an alle fuer ihren rat!
              wer jedoch noch konkret eine regex auf lager hat mit der man das problem dann in einer zeile loesen kann: her damit!!!!

              Kommentar

              Lädt...
              X