PHP regex: Ganzes Wort suchen

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
967
Hallo, ich habe ein Problem: Ich möchte mit regex nach einem Pattern mit verschiedenen Suffixen suchen, darunter auch ein ganzes Wort. Das Problem, es wird auch ein mit mit einem einzelnen Buchstaben des Wortes gefunden.

Mein Regex:
Code:
/(\d+[,\d+]+|\d+[.\d+]+)[\s]{0,}["|´|zoll]/i

Der Text:
Code:
Haibike XDURO Trekking 3.0 Lady 28 Zoll, Alu, Sram NX, 11-Ga

Das Ergebnis:
Code:
Full match	23-28	`3.0 L`
Group 1.	23-26	`3.0`

Gewünschte Ergebnis:
28

Im Text stehen kann:
28 Zoll
28"
28.0"
28.0´
etc...

28 ist kein fester Wert, es kann auch 27, 26, 29, ... etc. sein.
 
[...] ist eine character group, d.h. wenn du [zoll] schreibst akzeptiert er "z", "o", "l" (jeweils nur einen character). noch dazu machen die | nicht viel sinn... was du wohl eher willst ist ein ("|´|zoll).

zusaetzlich ist das [\s]{0,} ziemlich redundant. wenn die character group bloss aus einem character (technisch gesehen einer weiteren character group... aber das mal aussen vor) besteht, kannst du eigentlich auch direkt \s{0,} schreiben. und das {0,} bedeutet auch nur "keine, oder beliebig viele vorkommnisse, da du das nicht per klammern () capturest kannst du auch statt des ganzen ausdrucks direkt "\s?" schreiben.

zu guter letzt kannst du noch ganz ans ende ein \b schreiben, falls du z.b. im text "3,0 zollstoecke" kein match haben moechtest.
 
lordfritte schrieb:
Im Text stehen kann:
28 Zoll
28"
28.0"
28.0´
Code:
$pat = '/
         ([\d.,]+)
         (?:\s[zZ]oll | ["`´\'])
        /x';
 
Zuletzt bearbeitet: (oops, vertippz)
Much improved version ...
Code:
$pat = '/
         (\d[\d.,]*)         # Ziffer gefolgt von Ziffer mit,ohne Punkt,Komma  
         \s*                 # danach Leerzeichen möglich,
         (?:ZOLL | ["`´\'])  # Einheit oder Sonderzeichen fuer Einheit
        /xi';
 
Zurück
Oben