/ / Variablen mit Strings innerhalb einer Zeichenkette füllen - php, string, preg-match

Füllen Sie Variablen mit Strings innerhalb einer Zeichenkette - php, string, preg-match

Ich habe verschiedene PHP ausprobiert str_* Funktionen, aber kann nicht die richtige Kombination von ersetzen finden, explode()usw. um zu tun, was ich brauche.

Ich möchte einen bestimmten Text aufnehmen, der in einer Zeichenfolge enthalten ist:

Nutzungsbedingungen ID: # 928374 (Val: $2.50, Add "l Gebühr: 10.25%)

Beachten Sie die Stringteile in Fettdruck. Ich muss sie von dieser Hauptsaite ergreifen. Diese fettgedruckten Werte ändern sich natürlich mehrmals pro Benutzer, was mich wirklich abschreckt. Der nicht fett formatierte Text ist konsistent / konstant.

Weiß jemand, ob das, was ich versuche, erreicht werden kann? Wenn ja, könnten Sie bitte eine Anleitung / Einsicht geben? Würde sehr geschätzt werden.

Antworten:

1 für die Antwort № 1

Da die meisten Werte statisch sind, können SieErsetzen Sie (die meisten) statische Werte von der Zeichenfolge und explodieren Sie auf Leerzeichen. Dann sind Sie mit den drei Werten (mit einem Komma auf den Werten, die Sie wegschneiden können) verlassen.

$replace = array("Terms of Service ID: #", "(Val: $", "Add"l fee: ", "%)");
$string = "Terms of Service ID: #928374 (Val: $2.50, Add"l fee: 10.25%)";

$result = str_replace($replace, "", $string);  // Replace static strings
$pieces = explode(" ", $result);               // Explode on spaces, get pieces
$pieces[1] = rtrim($pieces[1], ",");           // Trim away the trailing comma

$id = $pieces[0];
$value = $pieces[1];
$fee_percent = $pieces[2];

3 für die Antwort № 2

Sie könnten einen regulären Ausdruck dafür verwenden:

$str = "Terms of Service ID: #928374 (Val: $2.50, Add"l fee: 10.25%)";
$pattern = "/Terms of Service ID: (#[0-9]+) (Val: ($[0-9.]+), Add"l fee: ([0-9.]+%))/";
$matches = array();
preg_match($pattern, $str, $matches);

Dann ist es nur eine Frage des Zugriffs auf die erfassten Werte in der $matches Array in den Indizes 1, 2 und 3.


Bearbeiten

Hier ist ein kompakter regulärer Ausdruck, der resistenter gegenüber Formatierungsänderungen sein sollte und den $ und % Zeichen aus den Ergebnissen:

$str = "Terms of Service ID: #928374 (Val: $2.50, Add"l fee: 10.25%)";
$pattern = "/(#[0-9]+)[^$]+$([0-9.]+)[^0-9]+([0-9.]+)%/";
$matches = array();
preg_match($pattern, $str, $matches);

Die Ausgabe für dieses spezifische Beispiel ist:

$matches = array(
"#928374 (Val: $2.50, Add"l fee: 10.25%",  //matched from the entire regular expression
"#928374",  //first capture group
"2.50",     //second capture group
"10.25"     //third capture group
);

-1 für die Antwort № 3

Sie können Regex für dieses Problem verwenden.

Wenn Sie eine Minute haben, werde ich etwas für die verschiedenen Sachen geigen, die Sie holen wollen.

$str = "Terms of Service ID: #928374 (Val: $2.50, Add"l fee: 10.25%)";
$id = preg_match("/#[0-9]*/", $str, $matches)[0];
$val = preg_match(/$[0-9]*.[0-9]*/, $str, $matches)[0];