Problem mit preg_match_all()

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

  • Problem mit preg_match_all()

    ich habe folgenden quelltext...

    PHP-Code:
    $pattern "/<a.+href=['"]?(http[s]?|ftp):\/\/([^\/ "']+)/";    
    preg_match_all($pattern$_POST['quelltext'], $ausgabePREG_PATTERN_ORDER);

    print_r($ausgabe); 
    und folgende Fehlermeldung:

    Parse error: parse error, unexpected ']' in /home/httpd/docs/xxx/xxx/quelltext.php on line 1

    Ich vermute das es an den " (Anführungszeichen) im Pattern-Teil liegt, jedoch habe ich diese bereits mit einen \ auskommentiert und auch die einfache Anführungszeichen am Anfang und dem Ende der Variable ausprobiert. Es geht aber immer noch nicht. Woran kann das noch liegen und wie kann ich den Fehler beheben?

    Vielen Dank!
    » http://www.htaccess-generator.com

  • #2
    das zauberwort heißt escapen (nicht auskommentieren) und davon erkenne ich in deinem posting leider nichts.

    extrahiere das pattern mal aus der funktion und speichere es in einer eigenen var, dann solltest du die fehler schneller finden.

    Kommentar


    • #3
      Re: Problem mit preg_match_all()

      Original geschrieben von bweichel
      Ich vermute das es an den " (Anführungszeichen) im Pattern-Teil liegt, jedoch habe ich diese bereits mit einen \ auskommentiert und auch die einfache Anführungszeichen am Anfang und dem Ende der Variable ausprobiert. Es geht aber immer noch nicht.
      Willst du ernsthaft behaupten,
      Code:
      $pattern = "/<a.+href=['\"]?(http[s]?|ftp)://([^/ \"']+)/";
      würde immer noch zum gleichen Fehler führen ...?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        alles klar, ich nehme es zurück... ich habe es zwar wie wahsaga ausprobiert, jedoch kam da auch ne Fehlermeldung. Ich dachte es war die gleiche, aber da hab ich wohl nicht richtig hingesehen. mein fehler.... sorry für den unnötigen post... trotzdem besten dank... sorry, sorry, sorry!
        » http://www.htaccess-generator.com

        Kommentar


        • #5
          jetzt noch mal ne frage...

          mit folgendem pattern möchte ich aus dem html tag <font></font> einen string rausfiltern... dieser string kann zusätzliche angaben haben, die ich aber in meinem array[1] nicht haben will. dazu habe ich folgenden ausdruck geschrieben:

          PHP-Code:
          $pattern "/<font color=#008000\>([^\"]+)([- [0-9]{1,}.+-]*)([^\"]*)\<\/font>/"
          das problem ist nun, dass er mir alle strings rausfiltert die zusätzliche angaben haben, jedoch die ohne zusätzliche angaben gibt er nicht mehr zurück. der * (Stern) bedeutet doch das die Zeichenkette in den klammern vorkommen darf, aber nicht muss. warum funktioniert es dann nicht?

          ich denke das der fehler in
          PHP-Code:
          ([- [0-9]{1,}.+-]*) 
          liegt. ich komme aber nicht drauf.

          vielen dank für eure hilfe!
          » http://www.htaccess-generator.com

          Kommentar


          • #6
            hast du da innerhalb einer zeichenklasse eine weitere klasse und quantifier angegeben? das geht beides nicht.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              danke für deine hilfe... welches zeichen bestimmt denn, was in einer array kommt? ich habe es nun wie folgt abgeändert...

              PHP-Code:
              $pattern "/<font color=#008000\>([^\"]+)(- [0-9]{1,}.+-)*([^\"]*)\<\/font>/"
              aber der bereich (- [0-9]{1,}.+-)* wird nun mit dem bereich davor zusammengefasst... das soll ja nicht so sein... ich möchte in array[1] nur den wert/ string von folgendem bereich haben ([^\"]+)

              danke für deine hilfe!
              » http://www.htaccess-generator.com

              Kommentar


              • #8
                Hi,

                wenn du einen wert nicht willst, dann mach ihn nicht zu einem capture, soll
                heissen mach keine klammern drum und wenn du doch klammern musst
                dann so:

                Code:
                (?regex)
                Jeder ausdruck der durch "regex" gematched wird, wird nun nicht gecaptured.
                Aber mal was anderes. Was willst du eigentlich mit diesem ausdruck bewirken ?
                Code:
                (- [0-9]{1,}.+-)
                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  also ich hab`s jetzt nochmal vereinfacht und auch die klammern weg genommen. leider steht immer noch der zusatz mit in array[1]... kannst du mein php-code entsprechend ändern... ich glaube dann peile ich es das eher... vielen dank...

                  PHP-Code:
                  $pattern "/<font color=#008000\>([^\"]+)-?.*\<\/font>/"
                  » http://www.htaccess-generator.com

                  Kommentar


                  • #10
                    Hi,

                    das problem ist dass du nicht die entscheidenen informationen lieferst.
                    Du willst eine regex entwickeln. Dafür ist es notwendig dass du genau
                    weisst für welche ausdrücke dein DFA mit ergebnis terminieren soll.

                    Ums mal zu veranschaulichen. Ich möchte eine regex entwickeln
                    die eine zahl und nur eine ganze zahl matched. Dann überleg ich mir, was
                    denn so eine ganze zahl überhaupt eindeutig identifizierbar macht und ich
                    komme zu dem schluss, dass eine ganze zahl eine folge von ziffern ist die
                    optional noch ein minus- oder pluszeichen vorangestellt haben darf.
                    Die anzahl der folgeglieder muss mindestens 1 betragen.
                    Bei genauer betrachtung darf eine ganze zahl deren länge größer 1 ist
                    nicht mit einer null beginnen aber das lass ich jetz mal aussen vor.

                    Nachdem ich also weiss nach was ich suche kann ich hingehen und mir
                    die benötigten sprachlichen mittel, die mir regex bieten, raussuchen und
                    in geeigneter weise notieren.

                    Ich komme dann auf beispielsweise folgenden ausdruck.
                    Code:
                    [\+|\-]?[0-9]+
                    So und nun möchte ich wissen was du dir überlegt hast, und dann
                    kommt man auch auf den richtigen ausdruck, wenn es ihn gibt.

                    greets
                    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                    Kommentar


                    • #11
                      hey, tut mir leid... ich raste bald aus... ich weiß wirklich nicht mehr weiter... du hast geschrieben das der bereich der geklammert wird in meiner ausgabe steht... jetzt habe ich die kette ab dem "-" nicht mehr geklammert und es steht trotzdem noch drin...

                      also ich habe folgenden text:

                      <font color=#008000>irgendwas - HB - weiter...</font>

                      ich will aber nur das den bereich "irgendwas" haben und der rest kann weg geworfen werden... jetzt kann es aber auch vorkommen das hinter dem irgendwas nichts mehr kommt, also der html tag direkt danach endet...

                      hier nun mein pattern... ich weiß wirklich nicht mehr weiter...

                      PHP-Code:
                      $pattern "/<font color=#008000\>(.+)-?.*\<\/font>/"
                      mit dem -? habe ich doch jetzt den vorher gecaptured`en Wert begrenzt, also er soll bei dem "-" wenn denn eins vorhanden ist aufhören...
                      » http://www.htaccess-generator.com

                      Kommentar


                      • #12
                        PHP-Code:
                        $pattern "/<font color=#008000>(.+)-?.*</font>/"
                        eine sache wäre schon mal den "." zu begrenzen (dein beispiel funktionert nur wenn du ein font hast :P) - das geht einfach mit einem "?"
                        PHP-Code:
                        $pattern "/<font color=#008000>(.+?)-?.*</font>/"
                        was das "-?.*" machen soll weiss ich nicht - ich glaube du hast noch nicht richitg verstanden
                        PHP-Code:
                        $pattern "/<font color=#008000>(.+?)(?-.*?|)</font>/"
                        so sollte es gehen: das fragezeichen am anfach der klammer zählt die klammer nicht (wobei dir das auch egal sein kann da du sie ja nicht auslesen musst dann kommt das "-" und dann wieder ein begrenzter punkt - und noch was: "</font>" das "/" musst du escapen da du es als delimiter verwendest - die "< >" und "=" solltest du auch escapen also sieht das jetzt so aus:
                        PHP-Code:
                        $pattern "/\<font color\=#008000\>(.+?)(?-.*?|)\<\/font\>/"
                        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                        Kommentar


                        • #13
                          also es ist mir zwar immer noch nicht ganz klar, aber es funktioniert jetzt. habe folgendes eingesetzt:

                          PHP-Code:
                          $pattern "/\<font color=#008000\>(.+?)(-.*?|)\<\/font>/"
                          bei dem fragezeichen am anfang der klammer hatte er probleme. da ich die lösung nicht wußte und es ohnehin egal war, habe ich es weggelassen.

                          also nochmal zusammengefaßt...

                          sobald ich etwas in klammern setze, wird ein array gebildet... muss ich was klammern, will es aber nicht ausgeben, muss ich an den anfang der klammer ein fragezeichen setzen (was bei mir aber nicht funktioniert hat). des weiteren kann/muss ich bestimmte dinge begrenzen, dafür steht wieder das ?. möchte ich also das ein string beliebige art an dem nächsten - abgeschnitten wird muss ich den . (punkt) + oder .* mit einem fragezeichen dahinter begrenzen und danach das begrenzungszeichen angeben, also in meinem fall -?.

                          ich hoffe ich hab das jetzt einigemaßen verstanden... kann reg ausdrücke eigentlich in jeder php funktion anwenden? ich wollte bei array_search() reg ausdrücke anwenden.
                          » http://www.htaccess-generator.com

                          Kommentar

                          Lädt...
                          X