preg_match_all Problem

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

  • preg_match_all Problem

    Tagchen also ich habe einen String: "hallo frau and mann or haus & klaue eins".
    Was ich jetzt brauche sind alle "and Wort", "or Wort", "not Wort".... (also and mann, or haus, & klaue) sowie jedes Wort bei dem kein and, or, not... davorsteht (hallo, frau, eins)
    Erstes hatt ich nach ca. 30 min gelöst.
    echo $search = "hallo frau and mann or haus & klaue eins";
    preg_match_all("!(and|AND|or|OR|not|NOT|\||\&)[ ]+[a-zA-Z0-9] *!",$search, $arr); // die \ vor | und & hätten mir die [p hp] tags gelöscht.
    echo "<pre>";
    print_r($arr);
    echo "</pre>";

    Ergebnis:
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => and mann
                
    [1] => or haus
                
    [2] => & klaue
            
    )

        [
    1] => Array
            (
                [
    0] => and
                [
    1] => or
                [
    2] => &
            )


    Beim 2ten, also ein array für (hallo, frau, eins) bekomm ich nun nach ca. 2 Stunden immernoch nicht gebacken. Könnt ihr mir helfen?

    MfG Markus

  • #2
    Re: preg_match_all Problem

    Beim 2ten, also ein array für (hallo, frau, eins) bekomm ich nun nach ca. 2 Stunden immernoch nicht gebacken. Könnt ihr mir helfen?
    #
    (?<!xxx)

    Negiert das angegebene Pattern und wirkt sich auf das nachfolgende aus.

    Beispiel: /(?<!text1)text2/

    Trifft auf eine Zeichenkette zu, die "text2" enthält, aber nur, wenn "text1" nicht davor kommt.
    http://www.php-resource.de/tutorials/read/10/1/
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Klappt aber immernoch nicht so wie es soll. Habs mit deiner Methode versucht, des hat aber überhaupt nicht geklappt.

      echo $search = "hallo frau and mann or haus & klaue eins";
      preg_match_all("![^ ]+[a-zA-Z0-9]*!",$search, $arr);
      echo "<pre>";
      print_r($arr);
      echo "</pre>";

      Ergebnis:
      PHP-Code:
      Array
      (
          [
      0] => Array
              (
                  [
      0] => hallo
                  
      [1] => frau
                  
      [2] => and
                  [
      3] => mann
                  
      [4] => or
                  [
      5] => haus
                  
      [6] => &
                  [
      7] => klaue
                  
      [8] => eins
              
      )


      wie bekomme ich jetzt des ausgeschlossen and|AND|or|OR|not|NOT|\||\&
      hin

      MfG Markus
      Zuletzt geändert von markusschmitt; 04.03.2004, 11:14.

      Kommentar


      • #4
        warum nicht so ?

        das einzige .. er findet und listet auch whitespace ..
        dem war jetzt auf die schnelle nicht beizukommen

        PHP-Code:
        <?php

        $search 
        'hallo frau and mann or haus & klaue eins | muh seufz OR hmm NOT test';

        preg_match_all '{(?:(?:and|AND|or|OR|not|NOT|\\||&)\\s+)?(?:[a-zA-Z0-9\\*\\?]+)}'$search$arr );

        print 
        '<pre>';
        var_export $arr[0] );
        print 
        '</pre>';

        ?>
        ausgabe:
        PHP-Code:
        array (
          
        => 'hallo',
          
        => 'frau',
          
        => 'and mann',
          
        => 'or haus',
          
        => '& klaue',
          
        => 'eins',
          
        => '| muh',
          
        => 'seufz',
          
        => 'OR hmm',
          
        => 'NOT test',

        EDIT:
        leerzeichen fand er wegen der regex für das einzelne wort .. da war ein * dahinter .. durch + ersettz ..
        Zuletzt geändert von Coragon Rivito; 04.03.2004, 11:44.
        mfg,
        [color=#0080c0]Coragon[/color]

        Kommentar


        • #5
          Supi, Danke

          MfG Markus
          Zuletzt geändert von markusschmitt; 04.03.2004, 11:32.

          Kommentar


          • #6
            darf man fragen wozu du das brauchst ?
            mfg,
            [color=#0080c0]Coragon[/color]

            Kommentar


            • #7
              Doch noch eine Bitte, könntest du den RegeEx noch ohne [ php] Tags poste, da verschwinden die \.

              was macht denn var_export? //php.net ist down

              hab festgestellt print_r und var_export zeigen unterschiedliches an. Wie sieht der Inhalt denn nun genau aus?

              MfG markus

              Kommentar


              • #8
                hab oben jetzt doppelt escaped .. sprich es stimmt nun ..
                das ampersand ( & ) zu escapen is unnötig ..
                ergo funktioniert obiges mit copy&paste ..

                var_export is wie print_r .. es wird bloß echter php code erzeugt, den man theoretisch weiterverwenden könnte ..
                verwandt is auch var_dump .. allerdings bekommst da die stringlänge und den typ .. alles unnützes zeug

                da alles in $arr[0] steckt hab ich auch nur das ausgeben lassen ..
                Zuletzt geändert von Coragon Rivito; 04.03.2004, 11:45.
                mfg,
                [color=#0080c0]Coragon[/color]

                Kommentar


                • #9
                  Super, Danke, hat mir sehr geholfen.

                  Gebraucht wird das Ergebnis um einen SQL String für eine Suche aufzubauen.
                  Das ? heißt, ein buchstabe weiß ich nicht. Der * heißt mehrere Buchstaben weiß ich nicht. Ste?an sucht also Stefan und Ste*an gibt Stefan und Stephan zurück.

                  MfG Markus

                  Kommentar


                  • #10
                    is mir klar .. nur warum du die wörter einzeln brauchst, versteh ich ned ganz ..

                    und lass mich (stefan) endlich aus dem spiel ^^ immer wird nach mir gesucht *fg*
                    mfg,
                    [color=#0080c0]Coragon[/color]

                    Kommentar


                    • #11
                      Naja mit einem Suchsting wie
                      "Adobe and *otoshop or *reader" kann man ohne alle Teile zu zerstückeln nicht suchen. Aus dem Ding soll praktisch später ein SQL String werden.

                      Noch eine Frage, gibt es eine Möglichkeit, dass auch Or,oR,nOT... auch erkannt werden, ohne dass man alle möglichkeiten angibt? Groß und Klein Schreibung soll also nicht beachtet werden?

                      MfG Markus

                      Kommentar

                      Lädt...
                      X