PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gesuchter Ausdruck ohne prefix


Jones
08.02.2006, 16:42
hi,

habe folgendes prob:

möchte aus einer zeichenkette eine 5 stellige zahl auslesen, bei der
davor ein P steht. Ergebnis soll aber nur die zahl liefern.

asdfgp12345qwert
([pP])(\d{5}) liefert mir aber leider p12345
ich bräuchte nur 12345

bin noch nicht durchgestiegen, wie ich das bewerkstellige

jones :-)=


eViL_oNe
08.02.2006, 16:58
in der 2. Gruppe sollte doch der erkannte Teilausdruck stehen?


$value = "asdfgp12345qwert";
$value =~ /([pP])(\d{5})/;

$decimalValue = $2;

Jones
08.02.2006, 18:40
gibt's ne möglichkeit, dass man das komplett in nem
regulären ausdruck zusammenfasst?

ich muss das später in ein anderes syszem portieren,
wo ich nicht diese commands habe, sondern nur einen kompletten
ausdruck angeben kann.

jones :-)=

eViL_oNe
09.02.2006, 11:26
jede mir bekannte Regex-Engine hat die Möglichkeit, Subgroups aus einem Match auszuwerten.

In PHP etwa übergibt man den regex-funktionen ein Array für die subgroups. In .NET/Java bekommt man als Match Ergebnis ein Objekt, das selbstverständlich auch die Subgroups beinhaltet

Das Verfahren ist immer das gleiche:

1. regulären Ausdruck ausführen
2. Match-Ergebnis auswerten und Subgroups betrachten

Jones
10.02.2006, 17:31
hab's gefunden:
(?<=[pP])(\d{5})


(?<=...)
Positive lookbehind.



trotzdem danke

jones :-)=

eViL_oNe
11.02.2006, 03:04
danke, endlich begriffen, wozu diese ominösen look-around operatoren sind ;)

btw, in diesem Fall kannst du auf die zweite Group verzichten ;)

also nur (?<=[pP])\d{5}