Volltextsuche mit preg_grep() ?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Volltextsuche mit preg_grep() ?

    Hallo PHP-Gurus da draussen,

    momentan sitze ich gerade an einem kleineren Problem. Ich will eine Volltextsuche realisieren, die mir jene Zeilen aus einer eingelesenen Datei ausspuckt (eingelesen mit file()), welche dem entsprechenden Suchbegriff entsprechen - am besten natürlich gleich mit preg_grep() und möglichst effizient.

    Die Volltextsuche sollte folgende Suchmöglichkeiten erlauben:
    "suchbegriff und was anderes" zur Term-Suche
    + und
    - nicht

    ein entsprechender "Filter", der mir diese Stellen herausgibt, hab' ich bereits.
    Also aus

    "ein satz in dieser form" - wort +satzlänge -"weiterer term"

    ergibt sinngemäss

    Muss drin sein:
    ein satz in dieser form
    satzlänge

    Darf nicht drin sein:
    wort
    weiterer term

    Vielleicht noch wichtig: Es spielt keine Rolle, wo der Suchbegriff im Text drin steht, am Anfang, Ende oder mitten in einem Wort ist nicht wichtig.

    Was mir vor allem Probleme bereitet, ist die Realisierung des Falles "NOT". Der Rest wäre ja eher einfach, doch ist es überhaupt möglich etwas "Negatives" gleichzeitig mit etwas "Positivem" zusammenzubringen?

    Vielen Dank für jegliche Hilfe im Voraus!

    Gruss, rob

  • #2
    Mhn, gibt es dafür nicht [^wort] bei den regulären Ausdrücken?
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Comment


    • #3
      hmm, verstehe nicht, wie Du das genau meinst.

      Beispiel:

      Der Suchbegriff ist: -nicht

      Textbeispiel: Dieser Satz existiert nicht.


      Wenn ich nun mit folgendem Ausdruck arbeite, wird obiger Text trotzdem gefunden, obwohl er ausgelassen werden sollte:

      #([^(nicht)])+#i

      Comment


      • #4
        http://www.php-resource.de/tutorials/read/10/1/ << lesen und lernen.

        Der Zirkumflex steht für den Anfang der Zeichenkette.

        Beispiel: /^a/i

        Trifft auf alle Zeichenketten zu, die mit einem kleinen oder großen "a" beginnen.
        mehr brauch ich net sagen, was du suchst ist !
        Sunshine CMS
        BannerAdManagement
        Borlabs - because we make IT easier
        Formulargenerator [color=red]Neu![/color]
        Herkunftsstatistik [color=red]Neu![/color]

        Comment


        • #5
          zuerst mal danke für Deine Hilfe!

          Mein Problem nun:

          #(suchwort_drin)(?!(.*)(suchwort_nicht_drin1|suchwort_nicht_drin2))#i

          das funktioniert.
          Nun müsste ich nur noch abklären, dass auch vor dem suchwort_drin keine Suchwörter, die man nicht drin haben will, drin sind.

          Hab's ganz "logisch" und naiv damit versucht:

          #(?<!(suchwort_nicht_drin1|suchwort_nicht_drin2)(.*))(suchwort_drin)(?!(.*)(suchwort_nicht_drin1|suc hwort_nicht_drin2))#i

          funktioniert genauso wenig wie ohne das (.*)

          #(?<!(suchwort_nicht_drin1|suchwort_nicht_drin2))(suchwort_drin)(?!(.*)(suchwort_nicht_drin1|suchwor t_nicht_drin2))#i


          Fehlermeldung:
          Warning: Compilation failed: lookbehind assertion is not fixed length at offset 14


          Meine Internetsuche hat ergeben, dass der ?<!-Backreference dies nicht unterstützt.
          Nur: warum?
          Und: wie kann ich nun mein Problem trotzdem lösen?


          edit: Deine Bemerkung wegen dem Zeilenanfang umgehe ich damit, dass ich bei jeder zu durchsuchenden Zeile am Anfang und am Ende ein Leerschlag einfüge.


          Danke für die Hilfe!

          Gruss, rob
          Last edited by roobin; 26-09-2004, 15:45.

          Comment

          Working...
          X