[RegEx] Zahlen und Dezimalzahlen finden

ricounltd

Mitglied
Hallo,
ich sitze schon wieder vor einem Problem. Ich möchte unterschiedliche Produktnamen modifizieren, um genauer zu sein, ich möchte verschiedene Formate aus den Namen filtern.

Ich habe folgende Formate:
- 14,5x181x1800
- 15x189x1860
- 7x68x1072
- 15x195x2000-2400
- 15x195/220/250x2000-2400
- 15x161/195x1850/2000

Diese Formate kann es im Produktnamen geben und diese möchte ich gern filtern, nur kenne ich keine vernüftige Regexp dafür. Im Moment arbeite ich mit folgender Regex:
PHP:
'/(\s[0-9]{1,3}x(.*)[0-9]{1,5}(\s|mm))|(\s[0-9]{1,2},[0-9]{1,2}x(.*)[0-9]{1,5}(\s|mm))/'

...um jetzt nur das Format zu erhalten ersetze, ich diese Pattern mit:
PHP:
'$1'

Das funktioniert soweit auch ganz gut, bis auf Dezimalzahlen - da haut es mir alles durcheinander. Meine komplette Funktion sieht so aus:
PHP:
preg_replace('/(\s[0-9]{1,3}x(.*)[0-9]{1,5}(\s|mm))|(\s[0-9]{1,2},[0-9]{1,2}x(.*)[0-9]{1,5}(\s|mm))/','Format: $1',$content);

Ich möchte einfach aus folgendem Beispiel (unabhängig vom Format):
Code:
Produktname und verschiedene Attribute 14,5x181x1800 Systemname

das Format, in folgender Form erhalten:
Code:
Format: 14,5x181x1800

...ich weiss nicht mehr weiter... kenne mich jetzt wirklich auch nicht so aus in diesem Bereich und hoffe deshalb auf hilfreiche Unterstützung. Vielen Dank!
 
Eventuell so?
PHP:
$string = "Produktname und verschiedene Attribute 14,5dm x 181cm x 1800mm Systemname";
$regex = "/([0-9]+(,[0-9]+)?(mm|m|cm|dm) ?x ?){2}([0-9]+(,[0-9]+)?)(mm|m|cm|dm)/i";
preg_match($regex, $string, $match);
echo 'Format: '.$match[0];
 
Hey, danke dir. Deine Lösung funktioniert leider nicht. Das Array bleibt leer.

@alxy: Es sieht so aus, das ich die Daten aus dem <title>-Tag der Site bekomme.
 
Meine Lösung funktioniert, ich habe sie getestet.

Hier akzeptiert sie auch Punkte als Komma sowie ein Leerzeichen zwischen Zahl und Maßeinheit.
Außerdem ist die Maßeinheit optional.
PHP:
$pattern = "/([0-9]+([.,][0-9]+)? ?(mm|m|cm|dm)? ?x ?){2}([0-9]+([.,][0-9]+)?) ?(mm|m|cm|dm)?/";
$str = "Produktname und verschiedene Attribute 14,5x181x1800 Systemname";
preg_match($pattern, $string, $match); 
echo 'Format: '.$match[0];
 
Zuletzt bearbeitet:
es fehlten die Delimiter im Pattern
PHP:
$pattern = "/([0-9]+([.,][0-9]+)? ?(mm|m|cm|dm)? ?x ?){2}([0-9]+([.,][0-9]+)? ?(mm|m|cm|dm)? ?)/";

Gruß
Peter
 
Zuletzt bearbeitet:
Hey, ja ok - das Regex funktioniert, allerdings nur bei einem solchen Format "14,5x181x1800", also mit Kommastelle. Bei folgenden Formaten funktioniert es nicht: "15x160/195x2000-2400"
 
Allgemeiner wäre es dann so:
PHP:
$regex = "/(\d[^x]*x[^x]*){2}(\d[^x]*x)?/";
$str = "15x160/195x2000-2400";
preg_match($regex, $str, $match);
echo "Maße: {$match[0]};";
 
Zurück