dedlfix: Regex: Alle Zahlen aus String filtern

Beitrag lesen

echo $begrüßung;

Ist mein Vorhaben uberhaupt realistisch mit Regex zu lösen?

Teilweise.

Ein Zahl soll richtig sein, wenn sie nicht direkt an ein anderes Zeichen angrenzt mit Ausnahme von typischen Trennern wie "," und "." und mit Ausnahme "innerhalb" Tag-Klammern. <b> 555</b> ist also ein Zahl. </b>333<b> wäre keine. <b>44-55</b> ist eine Zahl, dfdff 44-55 fdfd auch, rtr44-55fdgfdg alerdings nicht.

Etwas zu finden, dem etwas bestimmmtes vorangeht oder nachfolgt oder dies eben nicht macht, ohne dass dieses mit in das Suchergebnis einfließt, macht man mit Assertions. Diese gibt es in den 4 Geschmacksrichtungen Lookahead und Lookbehind, jeweils positiv und negativ. Das Suchmuster der Assertion kann auch selbst wieder ein Muster mit variablem Anteil sein. Du hast ja hier mehrere, die du mit | (oder) getrennt angeben müsstest. Doch in dem Punkt sind Lookbehind Assertions eingeschränkt. Die Alternativen dürfen nur gleiche statische Länge aufweisen. Vielleicht geht es aber, den kompletten Ausdruck mit den Alternativen komplett zu klammern, so dass er für die Assertion wie einer aussieht.

Da manche umschließende Muster paarweise auftreten, wirst du vermutlich nicht umhinkommen, diese mit extra abgesetzten preg_match_all() zu suchen, denn sonst fändest du bei Alternativen in den Assertions Dinge wie: dfdff 4711</b>

Auch sollte das Ergebnis in diesem Fall die Zahl ohne Trenner also 4455 zurückliefern. Oder aus 12.388.444,24 sollte 12388444.24 werden.

Das geht mit RegExp nicht so einfach. Zeichen auszulassen wüsste ich nur zu realisieren, indem man die gewünschten Zeichen in Subpatterns ermittelt und diese Subpatterns der Ergebnismenge händisch zusammenfügt. Alternativ könnte man normale Stringfunktionen (z.B. strtr()) mit dem Ersetzen von . und - in Nichts und , in . beauftragen. Diesen Vorgang müsstest du extra über die Trennzeichen enthaltende Ergebnismenge laufen lassen.

Ich versuche mich da jetzt schon seit 2 Tagen dran und habe leider auch kaum Ahnung von Regex. Meine Vorgehensweise erzeugt endlos lange Ausdrücke die immer abwechslend nach Buchstaben und Zahlen sucht aber so komme ich nicht weiter: id=xyz(\d+)(\D+)(\d+).*.....usw

"Macht mir mal" gibt es hier (normalerweise) nicht. "Die Energie des Verstehens" hilft dir aber, konkrete Fragen zu klären oder Dinge zu erklären. Das Erfolgserlebnis etwas selbst gelöst zu bekommen statt abgeschrieben zu haben, möchte ich dir nicht vorenthalten. Teil das Projekt erst mal in kleine Schritte für die einzelnen Bedingungen und fass diese erst später zusammen. Gleich einen großen Versuch zu starten wird gerade bei "kaum Ahnung" wenig erfolgversprechend sein.

echo "$verabschiedung $name";