String: Teilstring bis zum ersten NICHT numerischen Zeichen
harald_77
- php
0 Tom0 fastix®0 Vinzenz Mai
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 ¶meters, 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???
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
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/)
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
Hi!
und parse_str() hilft:
Aber pass schön auf. Das erzeugt Variablen
Nur wenn man den zweiten Parameter weglässt.
Lo!
Hallo,
Hintergrund: Ich habe eine Variable ¶meters, 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 2kann 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
Hallo,
Hintergrund: Ich habe eine Variable ¶meters, 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 2kann 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