[REGEX] Fehler im Regex?

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

  • [REGEX] Fehler im Regex?

    Hallo,

    kann mir einer sagen, warum der folgende Regex nicht matched:

    "#(.*)&\#039;(.*[^\\\])&\#039;(.*)#Us"

    Der Regex soll auf bereits vorher umgewandelte ' (ergibt dann "& #039;"), sowie den zwischen diesen befindlichen Text matchen, wobei vor dem abschließenden ' kein "\" stehen darf.

    # = Delemiter




    Talaron

  • #2
    Bei mir funktioniert der Wunderbar! Bsp:

    PHP-Code:
    $string "asd'asd'as";

    if(
    preg_match("#(.*)&\#039;(.*[^\\\])&\#039;(.*)#Us"$string))
        echo 
    "yes";
    else
        echo 
    "no"
    Versuch's ggf. mal mit 2 oder 4 \ beim [^\\\], aber ich glaube eher dass der Fehler woanders liegt

    Kommentar


    • #3
      Hier mal der gesamte Befehl:

      PHP-Code:
      $string preg_replace("#(.*)&\#039;(.*[^\\\])&\#039;(.*)#Us""$1'<span class=\"lightred\">$2</span>'$3"$string); 
      //Edit:

      Das eine \ sollen natürlich 3 sein. Hier sollte mal dringend auf eine neurere vBulletin-Version gepatched werden.
      Zuletzt geändert von talaron; 12.04.2006, 14:09.

      Kommentar


      • #4
        Niemand eine Idee?

        Kommentar


        • #5
          Funktioniert meine Version oben?

          Kommentar


          • #6
            Die gibt "No" aus.

            Es scheint an der Anzahl der \ zu liegen.

            Nur mal zum Testen:

            Wie viele \ müsste ich schreiben, damit Regex zwei \ hintereinander versteht?

            Kommentar


            • #7
              @talaron
              wenn du viel mit Regulären Ausdrücken arbeitest, würde ich dir den Regex Coach empfehlen, ist sehr praktisch für Fehlerbehandlungen etc.

              Kommentar


              • #8
                Bei mir geht es. Es ist egal ob drei oder vier \ . Das sieht man wenn man die regexp
                als $reg=.... schreibt und ausgibt, es enthält beidemal zwei \.. Es ist auch egal,
                dass die '$' in "$1 $2 $3" nicht escaped sind.
                Es kann also nur noch am $string liegen, z.B. daran, dass auch & #39; erlaubt ist
                (dh ohne Null. Mein Abstand zwischen & und # ist forumbedingt).

                Kommentar


                • #9
                  Es scheint tatsächlich an dem & #39; zu liegen, da es mit &quot; keine Probleme gibt.

                  Deshalb die Frage:
                  Mahcen PHP oder PCRE Unterschiede zwischen ' und "?

                  Kommentar


                  • #10
                    Wie generierst Du denn die & # (0)39; und & quote; sodass
                    da ein Unterschied zu spüren wäre, und dass die 0 fehlt?
                    Mein htmlspecialchars macht & #039;.

                    Kommentar


                    • #11
                      Mein htmlspecialchars ändert die ' garnicht.

                      ich benutze zusätzlich eine selbstgebastelte Funktion, die auch ä, ö, ü und € umwandelt.

                      Dabei wird einfach
                      str_replace("'", "& #39;", $return);

                      ausgeführt.

                      Die " werden ganz normal von htmlspecialchars umgewandelt.

                      Zwischen "& #39;" und "& #039;" gibt es keinen Unterschied.
                      Zuletzt geändert von talaron; 12.04.2006, 20:40.

                      Kommentar


                      • #12
                        Der Unterschied zwischen & #39; und & #039; liegt darin, dass die ersteren von
                        Deiner regexp nicht gematcht werden (weil die 0 fehlt). Das würde die Frage lösen,
                        wenn nicht noch was dazukommt.

                        Das htmlspecialchars macht die Apostrophe, wenn als zweiter, fakultativer
                        Parameter ENT_QUOTES ist. htmlspecialchars ist im weiteren nur eine output-sanitizing
                        Funktion. Um alle Zeichen zu konvertieren, anstelle der selbstgemachten Funktion,
                        kann man htmlentities anschauen. (auch in den Stringfunktionen)

                        Kommentar

                        Lädt...
                        X