Autor |
Nachricht |
Sarky
Threadersteller
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
Verfasst Mo 03.08.2009 20:13
Titel HTML-Abschnitte per Regex erkennen |
|
|
Hi!
Ich habe hier ein kleines Problem:
Code: |
Dies ist ein Beispieltext.
<li>List item 1</li>
<li>List item 2</li>
Und dies ein weiterer Textabschnitt, gefolgt von einer weiteren Liste.
<li>List item 3</li>
<li>List item 4</li>
|
Nun geht es darum, die HTML-Bloecke mit den <li>s zu erkennen, und jeweils an den Anfang und ans Ende des kompletten Abschnitts ein <ul> bzw. </ul> zu setzen. So dass der Text also nach dem Parsen wie folgt aussieht:
Code: |
Dies ist ein Beispieltext.
<ul>
<li>List item 1</li>
<li>List item 2</li>
</ul>
Und dies ein weiterer Textabschnitt, gefolgt von einer weiteren Liste.
<ul>
<li>List item 3</li>
<li>List item 4</li>
</ul>
|
In einem Text koennen also beliebig viele dieser Abschnitte vorkommen, es geht darum sie alle zu erkennen.
Hat jemand von Euch eine Idee fuer eine moeglichst simple und elegante Loesung per preg_replace/preg_match ohne substr, strpos, str_replace Orgien?
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mo 03.08.2009 23:18
Titel
|
|
|
Wenn whitespace wirklich so vorhanden ist dann sollte es eigentlich gehen:
Code: | $str = "text 1
<li>foo 1</li>
<li>bar 1</li>
text 2
<li>foo 2</li>
<li>bar 2</li>
text 3";
$pattern = "#([\s](<li>.*?</li>)[\s]+([\w]))#is";
$to = '<ul>\2</ul> \3';
echo preg_replace($pattern, $to, $str); |
… bin nicht gerade fit in regulären Ausdrücken, gibt evtl eine bessere Lösung.
Zuletzt bearbeitet von m am Mo 03.08.2009 23:23, insgesamt 5-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht:
|
Verfasst Di 04.08.2009 00:04
Titel
|
|
|
wird html oder xhtml verwendet.
wenn 2: ist es wohlgeformt? Dann wäre es auch möglich das einfach als xml zu parsen.
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Di 04.08.2009 09:28
Titel
|
|
|
Du kannst aufgrund der Limitierung von (standard)-Regular Expressions keine Baumstrukturen parsen. Dafür brauchst du einen Tokenizer oder halt einfacher, du nutzt einen XML-Parser.
|
|
|
|
|
Sarky
Threadersteller
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
Verfasst Mi 05.08.2009 01:32
Titel
|
|
|
Danke fuer Eure Antworten.
Das ganze ist Teil eines Parsers der relativ schnell und ohne viel Overhead durchlaufen sollte, deswegen moechte ich eigentlich ungerne noch einen XML-Parser fuer dieses eine Problem anfeuern.
@m
Danke, das klappt schon um einiges besser als meine eigene Loesung
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mi 05.08.2009 08:42
Titel
|
|
|
1.) Kein Overhead, die 4 Stunden, die du über der Regex gehangen hast, hättest du auch in einen 10 Zeiler investieren können, der dir das Zeug parst und um jedes <li> im richtigen Kontext ein ul legt.
2.) Fehleranfälligkeit, das Script geht von Leerzeilen als Delimiter aus.
3.) Mangelnde Wartbarkeit.
Aber gut, Beratungsresistenz bin ich ja gewohnt hier
|
|
|
|
|
Sarky
Threadersteller
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
Verfasst Do 06.08.2009 00:12
Titel
|
|
|
Immer wieder schoen wenn Leute von A unvermittelt auf B schliessen ohne die Hintergruende genau zu kennen - und das hat nichts mit Beratungsresistenz meinerseits zu tun.
Dennoch danke fuer den Fisch.
|
|
|
|
|
|
|
|
Ähnliche Themen |
[REGEX/REWRITE] + und &
JS | replace - regex - br
Regex für Mailheader
Grep/RegEx frage
Per RegEx auslesen und ersetzen
[REGEX] Problem bei Usernamen
|
|