Syntaxhighlighting und reg. Ausdruckproblem

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

  • Syntaxhighlighting und reg. Ausdruckproblem

    mal wieder das leidige Thema regulärer Ausdruck, immer wenn ich denke ich hab es jetzt wirklich drauf stehe ich vor einer neuen Hürde, villeicht beschäftige ich mich aber auch einfach zu wenig damit weil es nervt, also das Problem ==>

    Syntaxhighlighting :
    Code:
    for($n=0;$n<count($highlight);$n++)
      {
        $dumm = "/(?<![$a-zA-Z0-9])(".$highlight[$n].")/";
        $co = preg_replace($dumm,"<b CLASS=\"$class\">\\1</b>",$co);
    	}
    $new .= $co.substr($return,strlen($out));
    die Idee ist das vor einem Befehl keine alphanummerischen Zeichen stehen dürfen sondern nur irgendwelche Sonderzeichen kommen können. Leider funzt es nicht Aber warum ?


    EDIT:
    du hattest ein / vor dem code-Tagende vergessen


    [Editiert von BrainBug am 11-01-2002 um 10:46]

  • #2
    was soll in dem Zusammenhang das $-Zeichen vor dem "a-zA-Z0-9" ??

    Und gibt mir mal ein Beispiel, was du finden willst und was nicht sein darf.

    P.S.: außerdem versteh ich nicht was das ! soll??

    [Editiert von BrainBug am 11-01-2002 um 10:47]

    Kommentar


    • #3
      hmm,

      leider findet er zuviel,
      das $ ist um Variablen aus zu schliesen zB. $fortyfive wird leider erkannt $fortyfive

      oder irgendwas = irgendwas

      Kommentar


      • #4
        hmm,

        schau mal rein
        http://www.joelh.de/testjbb/topiczei...nr=683&seite=1

        da siehst du was passiert

        das ! negiert die Sache , also alles was in der [ ] steht darf nicht vorkommen ?< bedeutet das es rückwirkend zum nächsten Teil des Ausdrucks behandelt wird. Zumindestens lese ich das so aus den Beschreibungen des Manuals usw.

        Kommentar


        • #5
          Ich habe ja auch meine Probleme mit den pregs
          Vielleicht vereinfachen Dir u.a. Infos Deine pregs

          Ich gebe es hier nur an, weil es im Handbuch nicht dokumentiert und schwer zu finden ist.

          PHP arbeitet auch nach POSIX-Standard 1003.

          :alnum: Alphanumerische Zeichen
          :alpha: Zeichen des Alphabets
          :digit: Numerische Zeichen (Ziffern, Plus, Minus)
          .blank: Leerzeichen und Tabulator
          :space: Alle "weißen" Zeichen
          unct: Satzzeichen
          :lower: Kleinbuchstaben
          :upper: Großbuchstaben
          :graph: Druckbare und sichtbare Zeichen
          rint: Alphanumerische Zeichen
          :xdigit: Hexadezimale Zeichen (0-9,a-f,A-F)

          "[a-zA-Z0-9]" entspricht also "[:alnum:]"

          Aber vielleicht ist das hier ohnehin bekannt.

          Kommentar


          • #6
            hmm,

            schon probiert, daram liegt es nicht, wie du ja selbst sagst, es sind Synonyme

            Kommentar


            • #7
              nein, wenn du innerhalb der [] ein ^ benutzt, wird die Auswahl innerhalb der [] negiert. Du benutzt ja schließlich preg_replace -> also wird die PCRE-Syntax benutzt.

              Ich schau mir gleich mal deinen Link an...

              Kommentar


              • #8
                verstehe ich das richtig: du suchst nach Code-Befehlen und willst die hervorheben. Aber verhindern, daß es Bruchstücke aus einem längeren Wort sind oder sogar eine Variable. Richtig?

                Versuch mal das:

                $dumm = "/(?i)(?<!["."\$"."a-zA-Z0-9])$highlight[$n]/";

                P.S.: ich glaube, du mußt das $ mit einem \ kommentieren, da es sonst als Operator oder sogar von PHP als einfügen von Variable $a erkannt wird.

                P.S.S.: laß dir auch mal $dumm ausgeben als String -> ob dann [$a... richtig drin ist.

                [Editiert von BrainBug am 11-01-2002 um 11:35]

                Kommentar


                • #9
                  hmm,

                  noe,
                  mag er nicht


                  [b]edit :
                  aber fortschritt erzielt :
                  Code:
                  $dumm = "/(?<![\$a-zA-Z0-9]{1})(".$highlight[$n].")/";
                  so jetzt gehts aber wie muss ich das ende gestalten ?

                  das geht leider nicht :
                  Code:
                  $dumm = "/(?<![\$a-zA-Z0-9]{1})(".$highlight[$n].")(![\$a-zA-Z0-9]{1})/";
                  eigentlich schade oder ?


                  [Editiert von JoelH am 11-01-2002 um 11:44]

                  Kommentar


                  • #10
                    und wie sieht der String bzw. dessen Ausgabe aus?

                    Kommentar


                    • #11
                      hmm,

                      okay habs gefunden geht jetzt
                      Code:
                      $dumm = "/(?<![\$a-zA-Z0-9]{1})(".$highlight[$n].")(?![\$a-zA-Z0-9]{1})/";
                      ist eigentlich ganz einfach, das {1} musste in die Klammer rein warum auch immer ?? Naja es ist imemr weider ein Erlebnis.

                      Kommentar


                      • #12
                        Der Quantifier darf nicht vom gegroupten Pattern getrennt werden, sondern muss direkt darauf folgen...

                        CAT Music Files

                        Kommentar


                        • #13
                          hmm,

                          Sky wo warst du als ich dich brauchte ????
                          Naja, jetzt bist du da und darfst gleich weiter mithelfen, ich werden dich auch im Quellcode lobend erwähnen, also wieder selbe URL http://www.joelh.de/testjbb/topiczei...nr=683&seite=1

                          Es geht jetzt um die dunkelroten in den php Tags, also eigentlich will ich nur die Variablen einfangen, so wie $i oder $x usw. leider wird alles was folgt eingefärbt. Ich hoffe mir kann einer helfen, denn immer wenn ich hier poste hab ich dann selbst die Ideen die was taugen, also mein momentaner Stand ist :
                          Code:
                          for($n=0;$n<count($var);$n++)
                          	{
                          		$dumm = "/".$var[$n]."/";//(?![a-zA-Z0-9_]{1})/";
                          		$co = preg_replace($dumm,"<b CLASS=\"$varclass\">\\1\\2</b>",$co);
                          	}

                          Wobei
                          Code:
                          $var[n] = "([\$])([a-zA-Z0-9_].*)(?![:alnum:])";
                          ist.

                          Kommentar


                          • #14
                            Ich verstehe die Zeile "$dumm = [...]" nicht... I can't parse that

                            CAT Music Files

                            Kommentar


                            • #15
                              hmm,

                              ganz einfach,
                              die reg. Ausdrücke stehen in einem Array, ist bei den Variablen jetzt nicht sinnvoll, aber wenn ich 1700 Befehle hab kann ich das ja nacheinander ersetzen lassen, darum die Schleife, die ist einfach Copy&Paste entstanden, die mach ich mal raus wenn ich Lust hab oder das Teil rennt, aber damit du mi helfen kannst ==>

                              Code:
                              $dumm = "/([\$])([a-zA-Z0-9_].*)(?![:alnum:])/";
                              $co = preg_replace($dumm,"<b CLASS=\"$varclass\">\\1\\2</b>",$co);
                              wird es klarer ?

                              DIe Idee des Ausdrucks :
                              ([\$]) es kommt ein $ Zeichen
                              ([a-zA-Z0-9_].*) Es kommen beliebig viele Zeichen inc. unterstrich
                              (?![:alnum:]) Es kommt irgendwann ein Zeichen das nicht alphanumerisch ist.

                              aber es geht nicht




                              [Editiert von JoelH am 11-01-2002 um 23:16]

                              Kommentar

                              Lädt...
                              X