Mehrere Aufzählungslisten in Text mit RegEx erkennen und in <ul> und <li> umwandeln

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrere Aufzählungslisten in Text mit RegEx erkennen und in <ul> und <li> umwandeln

    Hallo Zusammen,

    habe folgendes Problem:

    Ich möchte Aufzählungslisten, die der User so eingibt:

    Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer at pellentesque libero. Aenean hendrerit egestas dui, quis dignissim nunc convallis eget.

    - Haus
    - Baum
    - Kind

    Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.

    - Hund
    - Katze

    Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.
    In folgenden HTML-Code umwandeln:

    Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer at pellentesque libero. Aenean hendrerit egestas dui, quis dignissim nunc convallis eget.

    <ul>
    <li>Haus</li>
    <li>Baum</li>
    <li>Kind</li>
    </ul>

    Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.

    <ul>
    <li>Hund</li>
    <li>Katze</li>
    </ul>

    Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.
    Hat jmd eine Idee, oder sowas schonmal umgesetz?
    Bin ich da mit RegEx auf dem richtigen Weg?

    Habe folgendes gefunden: Funzt leider nur bedingt und nur für eine Aufzählung im Text.

    PHP-Code:
    $AnzahlItems substr_count($string,"\x95");
    for(
    $i=0;$i<$AnzahlItems;$i++)
    {
    $pattern "/\x95(.*?)<br \/>/";
    $replace $i=="<ul>\n<li>\\1" "<li>\\1";
    $replace .= $i==$AnzahlItems-"</li>\n</ul>" "</li>";
    $string preg_replace("$pattern",$replace,$string,1);
    }
    echo 
    $string;

    Qhttp://www.mrunix.de/forums/archive/index.php/t-41061.html 
    Danke im Voraus!
    dreman

  • #2
    Hallo,

    sieh dir mal preg_split an, damit sollte das problemlos machbar sein.

    Ins Blaue geraten und nicht getestet: <^- (.*)$>m

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Wo gibt der User das ein? Evtl. wär es sinnvoll ihm dort einen html-Editor zur Verfügung zu stellen? z.B. TinyMCE oder CKEditor.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        Zitat von dreman Beitrag anzeigen
        Hallo Zusammen,

        habe folgendes Problem:

        Ich möchte Aufzählungslisten, die der User so eingibt:
        ...

        In folgenden HTML-Code umwandeln:

        ...
        Das ist kein richtiges HTML, sondern Fließtext, in den ein paar Tags eingeschmuggelt wurden.

        Hat jmd eine Idee, oder sowas schonmal umgesetz?
        Ein preg_replace_callback() mit der richtigen Helper-Funktion dürfte ausreichen, um das Problem zu erschlagen.

        PHP-Code:
        $pcre '/(?:
            -\s+([^\r\n]+)(?=\r?\n(\r?\n)*)|
            \r?\n(?=\r?\n-\s+[^\r\n])

        )/x'
        ;

        $html preg_replace_callback($pcre'_callback'$raw);
        @
        define('crlf'"\r\n");

        function 
        _callback($h) {
            if (isset (
        $h[2])) {
                
        // end of list
                
        return sprintf('  <li>%s</li>%s</ul>'htmlspecialchars($h[1]), crlf);
            }
            if (!isset (
        $h[1])) {
                
        // begin of list
                
        return sprintf('%s%s<ul>'crlfcrlf);
            }
            return 
        sprintf('  <li>%s</li>'htmlspecialchars($h[1]));
        }

        echo 
        $html
        Das erzeugte HTML bleibt aber unschön, wenn der restliche Fließtext nicht entsprechend "eingefasst" wird. Ich würde dazu <p> oder notfalls <div> benutzen.

        Bin ich da mit RegEx auf dem richtigen Weg?
        Klar, warum nicht? Nur ist in deinem Beispiel viel zu viel drumherum. Viele Wiki-Engines verwenden übrigens eine ganz ähnliche Wiki-Syntax für Listen. Ein Blick in deren Quelltext könnte sich also lohnen.
        Zuletzt geändert von fireweasel; 06.11.2010, 00:19.
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar


        • #5
          Hab jmd Mittlerweile eine funktionierende Lösung gefunden?
          Die beiden oben machen es leider nicht... Hab beides probiert...

          Danke für Hilfe im Voraus...

          Kommentar

          Lädt...
          X