Simone: preg_match für Fortgeschrittende

HI
Da bin ich mal wieder !
Hier wird man(Frau) geholfen.

preg_match("=$suchw</b><br>(.*)\ |</font>|.*$=siU", $str, $keyww);

Irgendwie packe ich das nicht!

Zum Problem ich versuche HTML Text datenbankfähig zu machen
$suchw</b><br> ist da und konstant immer gleich (erste Regel ) und es müssen als Musteralternativen für das Ende verschiedene Möglichkeiten offen sein entweder \ |</font>|.  was ist an den Code falsch

Danke Simone

  1. Hallo Simone,

    preg_match("=$suchw</b><br>(.*)\ |</font>|.*$=siU", $str, $keyww);
    Irgendwie packe ich das nicht!

    siehe hier:
    http://laurent.riesterer.free.fr/regexp/
     ;-)
    damit kann man das wunderbar lernen und so ungeheuer nützlich, wie reguläre ausdrücke sind, ist es den aufwand auch wert, finde ich. viel spass! :-)

    freundl. grüsse aus berlin, Raik

    1. HI Raik
      Super Teil leider nicht Windows lauffähig!!

      Simone

      1. Hallo Simone,

        Super Teil leider nicht Windows lauffähig!!

        und ob!
        http://fakeraol.homeip.net/4_simone/VisualRegexp.rar
        bitteschön! ready to use
        bis morgen abend verfügbar ...

        freundl. grüsse aus berlin, Raik

        1. Hallo Simone,

          weis nicht, ob du es mitbekommen hast. deshalb hier nochmal:

          http://fakeraol.homeip.net/4_simone/VisualRegexp.rar
          bitteschön! ready to use
          bis morgen abend verfügbar ...

          freundl. grüsse aus berlin, Raik

          1. Hallo Raik Ich nutze was ähnliches "The Regex Coach" wenn ich mein
            Problem gelöst hätte würde ich nicht hier nachfragen. D.H. was
            nutzt das beste Programm wenn man(ich) nicht damit umgehen kann. Diese
            verdammte Unwissenheit...... man lernt dazu und Frau auch.. Danke
            werde es mir mal ansehen.

            Simone

  2. Hello,

    preg_match("=$suchw</b><br>(.*)\ |</font>|.*$=siU", $str, $keyww);

    Irgendwie packe ich das nicht!

    Zum Problem ich versuche HTML Text datenbankfähig zu machen
    $suchw</b><br> ist da und konstant immer gleich (erste Regel ) und es müssen als Musteralternativen für das Ende verschiedene Möglichkeiten offen sein entweder \ |</font>|.

    Hast Du mal an die Whitespaces gedacht? Es können ja Zeilumbrüche, Tabs, Leerzeichen etc im gesuchten Text stecken.

    Grüße

    Tom

    1. HI Tom

      $a = preg_replace("=\r\n=", "", $a);

      selbst wenn ich diese Umbrüche rausfilter geht es nicht..

      Naja, der Code läuft zu cirka 75% aber das sind immer noch 25% Handarbeit.
      es muss doch möglich sein Muster variabel am Ende zu gestalten
      so das ich die ganze Breite erfassen kann.

      Simone

      1. Hello,

        $a = preg_replace("=\r\n=", "", $a);

        selbst wenn ich diese Umbrüche rausfilter geht es nicht..

        Es gibt auch noch \t,\n,\r, das Leerzeichen, etc.

        Mein Tipp: Bau Dir einen garantiert einzeiligen Teststring, inn dem das Gesuchte drinsteht. Und dann experimentier solange, bis es klappt. Danach kannst Du dann mal versuchen, Leerzeichen, Tabs, Newlines, Zeilerückläufe etc einzubauen.

        Diese kleinen Hässlichkeiten können auch in beliebiger Reihenfolge und mehrfach vorhanden sein. Man sieht sie ja in "normalen" Editoren leider nicht.

        Grüße

        Tom

        1. Hello Tom
          Ich arbeite mit "Ulli V" hab aber auch noch Ultraedit ist dafür besser geignet jedoch hab ich mich an den Syntax von ulli gewöhnt und dieser ist einfach Super.

          So richtig bin ich immer  noch nicht weiter gekommen
          ich poste einfach mal mein Code:
          Verzeichniss einlesen Schleife..........
          $str = join("", file("$dir$file"));
          .......................
          if (preg_match("=([\d]{2}.+[\d]{2}.+[\d]{2}.+[\d]{4}[-\d]{5})=", $title[1], $nr)); // das ist eine Nummer die immer wieder kehrt
          {
          if (!empty($nr[1]))
          {Echo "$nr[1] $title[1]<br>"; // diese nummer ist im titel

          echo "<a href='$dir$file'>datei</A>";
          echo "<a name="#$datei"></a><br>";
          if  (preg_match_all('=<b>(.*)</b><br>=siU', $str, $keyww2))

          While(List(,$suchw) = Each($keyww2[1]))
                 {
          $suchw = preg_replace("=(<[^>]+>)=siU", "", $suchw);
            echo "<b>$suchw</b><br><br>";

          preg_match("=$suchw</b><br>(.*)\ |</font>|.*$=siU", $str, $keyww);// und hier ist das Problem
          $a =$keyww[1];
          $a = preg_replace("=<?.*??>=s", "", $a);
          $a = preg_replace("=\ =", " ", $a);
          $a = preg_replace("=(<[^>]+>)=siU", "", $a);
          $a = preg_replace("=\r\n=", "", $a);
          $a = preg_replace("=\s+=", " ", $a);

          echo "<u>$a</u><br> ";
               }
          echo "<hr> ";

          }

          1. Hello Tom
            Ich arbeite mit "Ulli V" hab aber auch noch Ultraedit ist dafür besser geignet jedoch hab ich mich an den Syntax von ulli gewöhnt und dieser ist einfach Super.

            So richtig bin ich immer  noch nicht weiter gekommen
            ich poste einfach mal mein Code:
            Verzeichniss einlesen Schleife..........
            $str = join("", file("$dir$file"));

            Bist Du sicher, dass in $str etwas drinsteht?

            echo "<pre>";
            echo $str;
            echo "</pre>";

            Gib doch noch mal ein paar Musterbeispiele vor.

            Grüße

            Tom

            1. HI Tom
              preg_match("=$suchw</b><br>(.*)\ =siU", $str, $keyww);
                                                   ^^^ hier müssen alternativen rein

              ::::::::::::::HTML:::::::::::::::::.

              <b>schlüsselwort eins</b><br>

              <ul>
              <li> texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt</li>
              </ul>

              <b>schlüsselwort zwei</b><br>
              texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt .<br>
               <br>

              </font>

              </TD>
                    </TR>
                  </TABLE>
              </body>
              </html>

              :::::::::::::::::::::::::::::::::::::
              das kann mein Suchmuster

              ----------------------------------------------------

              neue Datei *.html

              <b>schlüsselwort eins</b><br>
              textttttttttttttttttttttttttttttttt.<br>
               <br>

              <b>Indikationen</b><br>
              <ul>
              <li> Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt.</li>
              </ul>

              <b>schlüsselwort zwei</b><br>
              texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxt<br>

              </font>

              </TD>
                    </TR>
                  </TABLE>
              </body>
              </html>

              und hier scheitert der platter
              Schlüsselwörter werden erkannt jedoch fehlt der Inhalt
              if  (preg_match_all('=<b>(.*)</b><br>=siU', $str, $keyww2))

              While(List(,$suchw) = Each($keyww2[1])) // $keyww2[1] ist das Schlüsselwort

              {
                echo "<b>$suchw</b><br><br>";

              preg_match("=$suchw</b><br>(.*)\ =siU", $str, $keyww);

              echo "keyww[1]<br> "; //sollte der Text sein der zum Schlüsselwort gehört

              }

              Simone

  3. Hey,

    "Alternativen" gehören auch in Klammern, ansonsten bekommst du drei
    verschiedene reguläre Ausdrücke in einem (von denen die letzen zwei
    effektiv nach Nichts suchen).
    Und abhängig von deinem Text, kannst du dir evtl. auch das $ am Ende
    schenken. Backslashe waren hier auch größtenteils unnötig:

    preg_match("=$suchw</b><br>(.*)( |</font>|.)=siU", $str, $keyww);

    Statt (.*) könntest du evtl. auch (.*?) oder (.+?) gebrauchen(?)

    MsF,
    milky