Bitte keine Raute!

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

  • Bitte keine Raute!

    Liebe Freunde,

    wieder einmal habe ich eine Frage an euch. Ich dachte, es schon gelöst zu haben, allerdings hat mein Lösungsweg zu neuen Problemen geführt.

    Was möchte ich überhaupt? Ich überprüfe mal wieder Links und suche welche, die nicht mit ftp, http et cetera beginnen sollen. Das klappt! Da benötige ich eure Hilfe nicht. Allerdings findet mein kleines IF mit einem preg_match_all leider auch Links, die als Anker fungieren (z. B. "#top", kann auch "/#top" als Link sein!!). Dies möchte ich verhindern. Ein "(?!#)" bringt leider nichts. Wer weiß, wie's geht?

    Hier mein if:
    Code:
    preg_match_all('~(?:(?:action|data|href|src)=["\'])(?!file://)
    (?![url]ftp://[/url])(?![url]http://[/url])(?![url]https://[/url])(?!ww)(?!mailto)
    ([^"\']+)(?:["\'])~i', $value, $matches)
    Vielen Dank für eure Mühen - im Voraus, sozusagen.

  • #2
    Mh.. ich frage mich, warum ich erst drauf gekommen bin, nachdem ich das Thema geöffnet habe und nicht schon Stunden vorher:
    (?!\#)
    Einstweilen danke sehr für das Lesen .

    Kommentar


    • #3
      Okay, ich benötige doch eure Hilfe. Und zwar ignoriert mein Skript zwar die Raute, aber nicht wenn es z. B. "/#oben" heißt.

      Hier mein erster Parameter der preg_match_all-Funktion:
      Code:
      ~(?:(?:action|data|href|src)=["\'])
      (?!file://)(?!ftp://)(?!http://)(?!https://)(?!ww)(?!mailto)(?!\#)
      ([^"\']+)(?:["\'])~i

      Kommentar


      • #4
        Niemand eine Idee?

        Kommentar


        • #5
          Ich verstehe nicht ganz, was du vor hast. Bringt dir parse_url da nicht mehr?

          Kommentar


          • #6
            Nicht wirklich. Es geht darum, dass mein Skript bestimmte URL's finden soll und das tut er auch bereits. Leider findet er jedoch mehr, als er soll. Nicht finden soll er URL's, die mittels einer # (entspricht Anker in Links) beginnen. Auch diese sortiert er aus - außer, und DAS ist mein Problem, wenn vor der Raute ein Backslash (/) steht. Das möchte ich vermeiden, bekomme es leider nur nicht hin.

            Kommentar


            • #7
              musst du denn # escapen? reicht da nicht ein einfaches

              (?!#)


              ??? oder ggf noch additiv n

              (?!\/#)


              (reg_exp ist mein steckpferd - aber versuchen kannste es ja ma )


              edit:
              was meinste nu? backslash oder slash?
              Original geschrieben von frederic
              außer, und DAS ist mein Problem, wenn vor der Raute ein Backslash (/) steht.
              **********
              arkos
              **********

              Kommentar


              • #8
                Slash ...
                Auf (?!\/#) war ich auch schon gekommen. Aber dann gibt er mir wiederum alle Links zurück, die keinen Slash vor der Raute haben.

                Kommentar


                • #9
                  Dann machst du das Slash optional:
                  Code:
                  (?![\/]#)

                  Kommentar


                  • #10
                    Ne, dann findet er Links, die mit der Raute beginnen. Also z. B. den Link/Wert "#top". Ich verstehe das nicht .

                    Mein RegExp mit deinem Code sieht folgendermaßen aus:
                    Code:
                    ~(?:(?:action|data|href|src)=["\'])
                    (?!file://)(?!ftp://)(?!http://)(?!https://)(?!ww)(?!mailto)(?![\/]#)
                    ([^"\']+)(?:["\'])~i

                    Kommentar


                    • #11
                      Muss es denn unbedingt eine Regex sein? Mit parse_url kommst du bestimmt schneller und einfacher ans Ziel, als eine so komplexe Regex zu basteln, die eh niemand erweitern kann...

                      Kommentar


                      • #12
                        Ja, das muss es sein, weil es zu viele Individualitäten gibt. Außerdem gehen alle RegExp's (ich habe noch mehr), auch dieser, nur das mit der Raute stört. Bzw. das eigentliche Problem sind ja nur Links, die mit "/#xy" beginnen, "#xy" ignoriert er wie gewollt.

                        Kommentar


                        • #13
                          Ich habe leider immer noch keine Lösung?!

                          Kommentar

                          Lädt...
                          X