Probleme mit einfachen Regex
Julchen
- php
0 Vinzenz Mai0 Beat0 seth
Hi,
ich habe ein Problem mit einem einfachen Regex. Ich habe einen String nach diesem Muster
"Hier (PWT 15) mag irgendwas stehen (PWT12345)"
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.
Meine Code schaut bisher so aus:
function get_number($content)
{
preg_match('#(PWT(.*?))#', $content, $matches);
print_r($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.
Meine Probleme:
Ich weiß, so viele Fragen. Ich sitze da nun schon solange dran und so schwer kann es doch nicht sein.
Julchen
Hallo
"Hier (PWT 15) mag irgendwas stehen (PWT12345)"
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);
Diese Funktion gibt mir leider nicht die gewünschte Zahl zurück. Meiner Meinung nach müsste diese wenigstens " 15" und "12345" zurückliefern.
Nein. Wieso?
- Wieso liefert er mir nicht die Zahlen zurück?
Beachte die notwendige Maskierung von Zeichen in regulären Ausdrücken
- Wie mache ich es, dass er meinen Ausdruck nur anwendet, wenn dieser ganz am Ende des String ist?
Das steht im Abschnitt Reguläre Ausdrücke für Zeichenketten
- Wie mache ich es dass er nur Zahlen akzeptiert?
Reguläre Ausdrücke für einzelne Zeichen hat eine Antwort darauf.
Freundliche Grüße
Vinzenz
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
gudn tach!
/(PWT(\d+?))$/ ,
^ space nicht vergessen.
ausserdem ist es nicht notwendig auf non-greedy (+?) umzuschalten: /(PWT (\d+))$/
prost
seth