mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 15:04 Benutzername: Passwort: Auto-Login

Thema: HTML-Abschnitte per Regex erkennen vom 03.08.2009


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> HTML-Abschnitte per Regex erkennen
Autor Nachricht
Sarky
Threadersteller

Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht: Männlich
Verfasst Mo 03.08.2009 20:13
Titel

HTML-Abschnitte per Regex erkennen

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mo 03.08.2009 23:18
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Di 04.08.2009 00:04
Titel

Antworten mit Zitat Zum Seitenanfang

wird html oder xhtml verwendet.

wenn 2: ist es wohlgeformt? Dann wäre es auch möglich das einfach als xml zu parsen.
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 04.08.2009 09:28
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
Sarky
Threadersteller

Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht: Männlich
Verfasst Mi 05.08.2009 01:32
Titel

Antworten mit Zitat Zum Seitenanfang

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 Lächel
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 05.08.2009 08:42
Titel

Antworten mit Zitat Zum Seitenanfang

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 Grins
  View user's profile Private Nachricht senden
Sarky
Threadersteller

Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht: Männlich
Verfasst Do 06.08.2009 00:12
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.