harald_77: String: Teilstring bis zum ersten NICHT numerischen Zeichen

Hallo

ich hoffe,mir kann jemand von euch einen Tip geben, da ich mit Teilaufgabe, die ich gerade löse ein riiiiiiiiiesen Brett vorm Kopf haben..

Hintergrund: Ich habe eine Variable &parameters, in der sowas steht:
cPath=55_3&nochwas=76&nochwas1=444...
oder
cPath=2&nochwas=76&nochwas1=444...

Ich brauche immer den Inhalt von cPath und hiervon nur den ersten Teil.
Also beim ersten Beispiel die 55
beim zweiten die 2

kann mir jemand einen Tip geben, wie ich am besten vorgehe??

Ich komme nämlich mit meinem Weg irgendwie nicht weiter:
$mein_string = $parameters;
  $suchen = "cPath=";
  $letzter_punkt = strrpos($mein_string, $suchen);
  $VonCatBisEnde = substr ($parameters, ($letzter_punkt + 6) );

Dann habe ich diesen Wert
55_3&nochwas=76&nochwas1=444...
bzw
2&nochwas=76&nochwas1=444...

.. aber ich weiss jetzt irgendwie garnicht, wie ich es schaffe, dass der String ab dem "&" oder ab dem "_" abgeschnitten wird?? Also eigentlich bräuchte ich eine Funktion, die ab dem ersten NichtNumerischen Zeichen einen String irgendwie abschneidet..

HIIILFEEE???

  1. Hello,

    Schau Dir mal
    http://de3.php.net/manual/de/function.parse-str.php
    an.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Moin!

    Also eigentlich bräuchte ich eine Funktion, die ab dem ersten NichtNumerischen Zeichen einen String irgendwie abschneidet..

    HIIILFEEE???

    Dein String beginnt immer numerisch?

    intval()

    <?php  
    $a='123_Hallo';  
    echo intval($a);  
    ?>
    

    und parse_str() hilft:

    <?php  
    $parameters='cPath=55_3&nochwas=76&nochwas1=444';  
    parse_str($parameters);  
    $intcPath=intval($cPath);  
    echo $intcPath;  
    ?>  
    
    ~~~mffg (Mit freundlich- friedfertigem Grinsen)  
      
    fastix  
    
    -- 
    [Des fastix kleines CMS](http://www.fastix.org/fastix-cms/)
    
    1. Moin!

      und parse_str() hilft:

      Aber pass schön auf. Das erzeugt Variablen und kann, wenn Die Daten von außen kommen, bei unsauberer Programmierung (Verwendung nicht initialisierter Variablen oder sogar Arrays) zu heftigen Sicherheitsproblemen führen.

      Ich rate dringend zu einem:

      <?php error_reporting(E_ALL);

      als erster Zeile und dem Nachschauen im Quelltext (weil die Fehlerausgaben durch mit CSS positionierten Elementen) überlagert werden könnten, was da alles gesendet wird.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      1. Hi!

        und parse_str() hilft:
        Aber pass schön auf. Das erzeugt Variablen

        Nur wenn man den zweiten Parameter weglässt.

        Lo!

  3. Hallo,

    Hintergrund: Ich habe eine Variable &parameters, in der sowas steht:
    cPath=55_3&nochwas=76&nochwas1=444...
    oder
    cPath=2&nochwas=76&nochwas1=444...

    Ich brauche immer den Inhalt von cPath und hiervon nur den ersten Teil.
    Also beim ersten Beispiel die 55
    beim zweiten die 2

    kann mir jemand einen Tip geben, wie ich am besten vorgehe??

    Du suchst also in einem Variableninhalt nach folgendem Muster
     - die Zeichenfolge cPath=
     - gefolgt von einer beliebigen Anzahl von Ziffern,
       die Du Dir merken möchtest
     - gefolgt von einem Nichtzifferzeichen oder dem Ende der Zeichenkette
     - gefolgt von beliebig vielen (auch 0) beliebigen Zeichen.

    Weil Du nach einem Muster suchst, das doch etwas komplizierter als ein einfacher Teilstring ist, aber genau und recht einfach zu beschreiben, böte sich ein regulärer Ausdruck an. Ich empfehle im Gegensatz zu fastix und Tom daher preg_match().

    Ich würde nicht intval() auf den Rest einer Zeichenkette anzuwenden, da es in etlichen Fällen möglicherweise nicht das Gewünschte zurückliefert:

    cPath=042_17

    Rückgabe 24 statt gewünschter 042 (meine Vorstellung der richtigen Ausgabe)

    cPath=0x1A

    Rückgabe 26 statt gewünschter 0.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      Hintergrund: Ich habe eine Variable &parameters, in der sowas steht:
      cPath=55_3&nochwas=76&nochwas1=444...
      oder
      cPath=2&nochwas=76&nochwas1=444...

      Ich brauche immer den Inhalt von cPath und hiervon nur den ersten Teil.
      Also beim ersten Beispiel die 55
      beim zweiten die 2

      kann mir jemand einen Tip geben, wie ich am besten vorgehe??

      Korrektur:

      Du suchst also in einem Variableninhalt nach folgendem Muster
        - die Zeichenfolge cPath=
        - gefolgt von einer beliebigen Anzahl von Ziffern,
          die Du Dir merken möchtest
        - was weiter folgt, interessiert Dich nicht, denn reguläre Ausdrücke
          sind standardmäßig gierig und finden möglichst viel.

      Umgesetzt in PHP:

      <?php  
          $matches  = array();                    // Array für die Treffer  
          $haystack = '&foo=16&cPath=17_4&bar';   // Zeichenkette, in der wir suchen  
          $pattern  = '~cPath=([0-9]+)~';         // Muster für die Suche  
      	/*  
                 Erläuterung:  
                 ~            verwende ich hier als [link:http://de3.php.net/manual/de/regexp.reference.delimiters.php@title=Delimiterzeichen]  
                 cPath=       Auftreten der Zeichenfolge cPath=,  
                 ([0-9]+)     gefolgt von einem oder mehreren Ziffern,  
                              die Klammern sorgen für ein [link:http://de3.php.net/manual/de/regexp.reference.subpatterns.php@title=Teilmuster],  
                              dessen Treffer gemerkt werden.  
                 ~            Musterende  
                 Anmerkung:   falls keine Ziffer folgt, beispielsweise  
                              bei cPath=baz, dann gibt es keinen Treffer  
                              Ist dann die leere Zeichenkette gewünscht,  
                              verwende den [link:http://de3.php.net/manual/de/regexp.reference.repetition.php@title=Quantifier] * statt +  
        
                 Hinweis:     preg_match stoppt nach dem ersten Treffer.  
      	*/  
          $match    = [link:http://de3.php.net/manual/de/function.preg-match.php@title=preg_match]($pattern, $haystack, $matches);  
        
      	// Es folgt eine Debug-Ausgabe:  
          if ($match > 0) {  
              echo "<pre>\n";  
              print_r($treffer);  
              echo "</pre>\n";  
          }  
      	/* gibt folgendes aus:  
      	Array  
          (  
              [0] => cPath=17_4&bar  
              [1] => 17  
          )  
      	*/  
      ?>  
        
      
      

      Freundliche Grüße

      Vinzenz