Holen Sie sich einen ganzzahligen Wert aus einer fehlerhaften Abfragezeichenfolge
Lesezeit: 2 Minuten
Affenblau
Ich suche nach einer Möglichkeit, eine Teilzeichenfolge mit PHP zu analysieren, und bin auf preg_match gestoßen, aber ich kann die Regel, die ich brauche, nicht ausarbeiten.
Ich parse eine Webseite und muss einen numerischen Wert aus der Zeichenfolge abrufen. Die Zeichenfolge sieht folgendermaßen aus
producturl.php?id=736375493?=tm
Ich muss in der Lage sein, diesen Teil der Zeichenfolge zu erhalten:
Danke für den Vorschlag, ich habe diesen Code anfangs ausprobiert und er hat nicht funktioniert, also habe ich ihn angepasst preg_match('/id=(.*)\?/', $url, $matches); und es funktioniert jetzt perfekt. Vielen Dank 🙂
– Affenblau
9. Mai 2011 um 20:52 Uhr
<?php
$string = "producturl.php?id=736375493?=tm";
preg_match('~id=(\d+)~', $string, $m );
var_dump($m[1]); // $m[1] is your string
?>
Es ist in $m[1] weil (aus den Dokumenten): “Wenn Übereinstimmungen bereitgestellt werden, wird es mit den Ergebnissen der Suche gefüllt. $matches[0] enthält den Text, der mit dem vollständigen Muster übereinstimmt, $matches[1] enthält den Text, der mit dem ersten erfassten Teilmuster in Klammern übereinstimmt, und so weiter.”
wenn die Saite ist wie producturl.php?id=736375493?=tm&page=2 Sie werden mit einer zusätzlichen 2 in Ihrem enden $number.
– UnkwnTech
9. Mai 2011 um 20:09 Uhr
Sehr wahr, ich war davon ausgegangen, dass alle seine Strings das von ihm gepostete Format haben würden.
– slandau
9. Mai 2011 um 20:10 Uhr
Ja, das gibt mir eine zusätzliche Nummer in der Zeichenfolge, ich habe das gerade ausprobiert, was bis zu einem gewissen Grad funktioniert. preg_match('/id(.*)=', $body, $matches); aber es gibt mir immer noch =tm am Ende der Nummer in einigen Zeilen.
– Affenblau
9. Mai 2011 um 20:27 Uhr
mickmackusa
Leider haben Sie eine fehlerhafte URL-Abfragezeichenfolge, daher ist eine Regex-Technik am besten geeignet. Sehen was ich meine.
Es besteht keine Notwendigkeit für Erfassungsgruppen. Einfach passen id= dann vergiss diese Zeichen mit \Kund isolieren Sie dann das folgende oder die folgenden digitalen Zeichen.
Der Vollständigkeit halber gibt es noch eine andere Möglichkeit Scan der formattierter String und gibt explizit einen int-typisierten Wert zurück. (Demo)
var_dump(
sscanf($str, '%*[^?]?id=%d')[0]
);
Die %*[^?] bedeutet: ein oder mehrere Nicht-Fragezeichen-Zeichen gierig abgleichen, aber die Teilzeichenfolge nicht erfassen. Der Rest des Formatparameters stimmt mit der wörtlichen Sequenz überein ?id=, fängt dann gierig eine oder mehrere Zahlen ein. Der zurückgegebene Wert wird aufgrund von in eine Ganzzahl umgewandelt %d Platzhalter.
14410000cookie-checkHolen Sie sich einen ganzzahligen Wert aus einer fehlerhaften Abfragezeichenfolgeyes