Regulärer ausdruck, aber wie?! :(

Hawkster

Erfahrenes Mitglied
Hallo allesamt,

Hab mich bisher versucht (und immer recht erfolgreich) an Regulären Ausdrücken vorbeizumogeln, bis jetzt :(

Folgendes Problem:
"P#DB1.DBX0.0 BYTE 1" ist der String, nun möchte ich hier folgendes auslesen, die "1" bei DB, das "0" vor dem Punkt und das "0" nach dem Punkt, und das "1" nach Byte. Wie löse ich das nun am elegantesten mit einem Regülären Ausdruck?!
Die Plausibilitätsprüfung will ich nicht mal in dem Ausdruck drin haben, nur das ich diese Informationen in ein Array reinbekomme, also als "Ergebniss".

Edit: Achja, die einzelnen zahlen können eine Beliebige größe annehmen, das sollte man noch erwähnen.

Kann mir da mal jemand helfen?!
Habs schon selbst versucht aber anscheinend reicht meine Kreativität nicht aus um das Problem korrekt anzugehen.

Mit Freundlichen Grüßen,
Hawkster
 
Zuletzt bearbeitet:
Das könnt funktionieren:

PHP:
<?php
$s = "P#DB1.DBX0.0 BYTE 1";

preg_match("/.*(\d).*(\d)\.(\d).*(\d).*/", $s, $matches);

array_shift($matches);

var_dump($matches);
?>
 
Zuletzt bearbeitet:
Leider nein, hab es nun so versucht
PHP:
<?php

$s = "P#DB1020.DBX50.3 BYTE 20";

preg_match("/.*(\d).*(\d)\.(\d).*(\d).*/", $s, $matches);

array_shift($matches);

echo "<pre>";
var_dump($matches);
echo "</pre>";
?>

Und raus kommt:
Code:
array(4) {
  [0]=>
  string(1) "5"
  [1]=>
  string(1) "0"
  [2]=>
  string(1) "3"
  [3]=>
  string(1) "0"
}

Desweiteren handelt es sich bei dem "P#DB" und der Angabe "BYTE" um eine Konstante. Wenn das noch in der Prüfung berücksichtigt werden könnte ist klasse :]

Mit freundlichen Grüßen,
Hawkster
 
Ich hab noch nicht verstanden, welche Werte du denn nun genau wie gesplittet haben möchtest. Kannst du mal ein Beispiel geben?
 
Oder so,

PHP:
<?php

  $string = "P#DB1020.DBX50.3 BYTE 20";

  preg_match_all('/(\d)+/i', $string, $matches);

  echo "<pre>";
  print_r($matches);
  echo "</pre>";
?>

wenn es nur Zahlen sein sollen.

Gruß
 
Vielleicht mit /P#DB(\d+)\.DBX(\d+)\.(\d+) BYTE (\d+)?

Das scheint zu Funktionieren.

Also, nochma ein paar beispiele, die Dicken Zahlen sollten Ermittelt werden
P#DB1.DBX0.0 BYTE 20
P#DB123.DBX0.3 BYTE 1
P#DB1020.DBX1320.3 BYTE 2200
P#DB1001.DBX1001. BYTE 99
P#DB33.DBX3231.3 BYTE 45
P#DB55.DBX0.1 BYTE 60
P#DB999.DBX210.7 BYTE 2
P#DB4352.DBX231.6 BYTE 543
P#DB3.DBX0.7 BYTE 23512

Mit freundlichen Grüßen,
Hawkster
 
Zurück