preg_split - wie nach ; trennen aber &xxxx; ausklammern?
zanda
- php
Hallo Forumsteilnehmer(in),
ich moechte einen Text via preg_split splitten.
Der Trenner ist das Semikolon ";".
Ausgenommen sein sollen aber HTML Formatierungen
wie z.B. "ü", also im Grunde alle "&....;".
Ich bin aber leider nicht so fit in RegEx, sodass
ich hier leider nicht ganz Durchblicke und mein
folgender Code nicht funktioniert ...
preg_split("/([^uml]{3});/", $text);
... dort wird zwar nur nach Umlauten negiert,
was auch nicht funktioniert, wenn jemand aber
weiss wie man allgemein mit "&....;", waere das
der Hammer :)
Danke fuer jede Hilfe.
Gruss Zanda
Hi,
Ausgenommen sein sollen aber HTML Formatierungen
wenn ich dazu mal die Perl-Doku zitieren darf (perldoc perlfaq4):
"""
How can I split a [character] delimited string except when inside [character]?
[...]
Due to the restriction of the quotes, this is a fairly complex problem. Thankfully, we have Jeffrey Friedl, author of a highly recommended book on regular expressions, to handle these for us. He suggests (assuming your string is contained in $text):
@new = ();
push(@new, $+) while $text =~ m{
"([^"\]*(?:\.[^"\]*)*)",? # groups the phrase inside the quotes
| ([^,]+),?
| ,
}gx;
push(@new, undef) if substr($text,-1,1) eq ',';
"""
Für PHP ist das Problem identisch, der explizite Code natürlich nicht.
Cheatah
Hi,
In der PHP-Doku steht im Abschnitt PCRE/PatternSyntax auch etwas zu
"Assertions", damit kannst du das machen.
preg_split('/(?<!&\w\w\w|.&\w\w|..&\w);/', $text);
Mit (?<!...) gibst du den Teil an, der nicht vorkommen darf (wird dann auch
nicht als Ergebnis, oder in diesem Fall Trennzeichen, ausgewertet).
Zu beachten ist aber, daß variable StringLängen (alles mit +, ? und *)
hierbei nicht erlaubt sind.
Grüße,
milky
Hi Milky,
das mit den "Assertions", also (?<!...) kannte ich nicht!
Folgendermassen habe ich das jetzt angewandt und es klappt.
preg_split("/(?<!&....|&...);/", $text]);
Tolle Funktion! :)
Vielen Dank Milky,
Gruss Zanda