Beat: Probleme mit einfachen Regex

Beitrag lesen

Ich möchte nun jeweils ganz am Ende des Strings (muss immer das Ende sein) die Zahl zwischen (PWT und ) auslesen. In diesem Falle wäre 12345.
...
   preg_match('#(PWT(.*?))#', $content, $matches);
get_number("Hier (PWT 15) mag irgendwas stehen (PWT12345)");
Diese Funktion gibt mir leider nicht die gewünschte Zahl zurück. Meiner Meinung nach müsste diese wenigstens " 15" und "12345" zurückliefern.

  • Wieso liefert er mir nicht die Zahlen zurück?

Weil du Zeichen nicht maskierst.
Zu beachten sind die Klammern, welche im RE unmaskiert die Bedeutung von _capturing parantheses_ haben, welche das Muster in den Variablen $1, $2, $3... speichern.
Wenn man diese Eigenschaften nicht will, dann muss man Zeichen wie
   '('  ')'  '['  ']'
maskieren mit einem Backslash. zu
   '(' ')' '[' ']'

  • Wie mache ich es, dass er meinen Ausdruck nur anwendet, wenn dieser ganz am Ende des String ist?

Dafür gibt es sogenannte Anker
  '^' findet den Beginn in einem String
  '$' findet das Ende in einem String

  • Wie mache ich es dass er nur Zahlen akzeptiert?

Um genau Zahlen zu treffen, gibt es zwei Möglichkeiten:
  '\d' finde eine Zahl 0-9
  '\D' finde etwas, das keine Zahl ist
  '[0-9]' finde eine Zahl zwischen 0 und 9
  '[3-6]' finde eine der Zahlen 3456
  '[^3-6]' finde etwas, das keine der Zahlen 3456 ist

preg_match(
         /(PWT(\d+?))$/  ,
         $content,
         $matches
     );

dürfte dir die gewünschte Zahl in

"Hier (PWT 15) mag irgendwas stehen (PWT12345)"

zurückgeben.

mfg Beat

--
   <°)))o><                      ><o(((°>o