RegEx-Frage
Ben72
- php
Hallo!
Eine technische Frage. Wie komme ich an F?
$records = "<r>A</r><r>B</r><r>C</r><r>D</r><r>E</r>F";
$records = preg_replace("!(?<=</r>)(.+)$!", " last Record: $1", $record);
echo $records;
ergibt
A last Record: BCDEF
gewünscht ist
ABCDE last Record: F
Die Bedingung in Zeile 2 sucht wohl nach dem ersten Vorkommen von </r>. Sie soll aber das letzte finden.
Geht da was mit regulären Ausdrücken?
Eine technische Frage. Wie komme ich an F?
$records = "<r>A</r><r>B</r><r>C</r><r>D</r><r>E</r>F";
$records = preg_replace("!(?<=</r>)(.+)$!", " last Record: $1", $record);
echo $records;ergibt
A last Record: BCDEF
gewünscht ist
ABCDE last Record: F
Die Bedingung in Zeile 2 sucht wohl nach dem ersten Vorkommen von </r>. Sie soll aber das letzte finden.
Offenbar ist F nicht ein Record im Sinne von A - E
Eventuell kannst du ihn mit /([^<>])+$/ matchen.
mfg Beat
Offenbar ist F nicht ein Record im Sinne von A - E
Eventuell kannst du ihn mit /([^<>])+$/ matchen.mfg Beat
Hallo,
weiß nicht, wie Du das meinst, aber ich habe es jetzt so gemacht:
!(<r>.+</r>)+(.+)$!
Trotzdem hätte ich noch die Frage, ob es nicht auch mit einem Look behind geht, das letzte Vorkommen selbigens zu finden, vielleicht irgend einen Modifier, den ich nicht kenne.
Offenbar ist F nicht ein Record im Sinne von A - E
Eventuell kannst du ihn mit /([^<>])+$/ matchen.
weiß nicht, wie Du das meinst, ...
Du hast angegeben:
$records = "<r>A</r><r>B</r><r>C</r><r>D</r><r>E</r>F";
F ist nicht durch ein <r> Element eingeschlossen.
Ich nehme eine genierende Zeichenklasse
[^<>]+
F darf aus allen Zeichen ausser < und > bestehen.
Aber diese Annahme kann falsch sein, da ich deine Daten nicht kenne.
aber ich habe es jetzt so gemacht:
!(<r>.+</r>)+(.+)$!
du kannst statt ( )+ die nicht speichernde Gruppierung verwenden, (?:)+
!(?:<r>.+</r>)+(.+)$!
Trotzdem hätte ich noch die Frage, ob es nicht auch mit einem Look behind geht, das letzte Vorkommen selbigens zu finden, vielleicht irgend einen Modifier, den ich nicht kenne.
Bei Lookbehind Assertions hast du meist die Beschränkung, dass die Zeichenlänge statisch ist.
!(?<=</r>)+(.+)$!
Wird dir nicht weiterhelfen, weil in
$records = "<r>A</r><r>B</r><r>C</r><r>D</r><r>E</r>F";
"<r>B</r><r>C</r><r>D</r><r>E</r>F"
bereits zutrifft.
!(?<=</r>)+([^<>]+)$!
wird nur "F" holen, ist aber nicht effizienter wie
!(?:<r>.+</r>)+(.+)$!
mfg Beat