Unerklärliches Verhalten einer RegExp Backreference in ASP

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

  • Unerklärliches Verhalten einer RegExp Backreference in ASP

    hallo.
    ich habe für ASP ein paar BBCode Funktionen geschrieben, also eine Übersetzung
    von BBCode in HTML (Beispiel: [ b ]hallo welt[ /b ] in < b >hallo welt< /b >).
    alles klappt soweit ganz, bis auf ein ganz kleines Problem mit HTML-Listen!

    Und zwar:

    Ich definiere mal einen Text mit BBCode, der nach HTML übersetzt werden soll:
    PHP-Code:
    str "test text test text [ list ][ * ]punkt 1[ * ]punkt 2[ * ]punkt 3[ /list ] test text." 
    (die Leerzeichen bitte wegdenken! Die musste ich
    machen, weil sonst dieses Forum die Angaben interpretiert^^) dieser
    String wird nun beim abspeichern/ausgeben durch die
    Funktion gejagt:
    PHP-Code:
    '### Funktions-Aufruf: ###'
    Response.Write bbc_list(str)

    '### BBC2HTML Funktion für[list] ###'
    Function bbc_list(inpStr)
        
    Set objRe = New RegExp
        objRe
    .IgnoreCase True
        objRe
    .Global = True

        objRe
    .Pattern "\\[list\\](.*?)\\[\\/list\\]"
        
    inpStr objRe.Replace(inpStr,"<ul>$1</ul>")

        
    objRe.Pattern "\\[list=(.*?)\\](.*?)\\[\\ /list\\]"
        
    inpStr objRe.Replace(inpStr,"<ol type=$1>$2</ol>")

        
    objRe.Pattern "\\[\\*\\](.*?)"
        
    outStr objRe.Replace(inpStr,"<li>$1</li>")

        
    bbc_list outStr

        Set objRe 
    Nothing
    End 
    Function 
    Und genau hier tritt das Problem auf!
    Er gibt nämlich folgenden HTML-Code aus:
    PHP-Code:
    test text test text
    <ul>
      <
    li></li>punkt 1
      
    <li></li>punkt 2
      
    <li></li>punkt 3
    </ul>
    test text
    Wie ihr seht steht der Inhalt NICHT ZWISCHEN <li> und </li>
    (das schließende </li> ist nicht zwar nicht erforderlich, ich brauche es hier aber).
    Ich bin echt am verzweifeln, weil ich diese Situation nicht verstehe! Die Backreference
    enthält ja anscheinend den korrekten Wert! Aber der Wert wird an dieser
    Stelle outStr = objRe.Replace(inpStr,"<li>$1</li>") nicht zwischen
    die Tags gesetzt, sondern ans Ende!

    Ich hoffe einer von euch kann mir helfen! An anderen Stellen benutze ich auch
    Backreferences, zB bei URLs usw. dort funktionieren die 1A!

    Danke schonmal,
    gruß dek*
    Zuletzt geändert von deklarmart; 27.05.2005, 15:28.
    GLORIA PERPETUA

  • #2
    hmm... sieht eigentlich OK aus..

    einzige, was mir so direkt auffällt ist, dass du die eckigen Klammern nicht escaped hast und auch das * nicht.

    Sind für regex reservierte Zeichen.

    [] <- Zeichenklasse
    * <- 0 oder mehr Zeichen

    Kommentar


    • #3
      ah, mist! sorry, aber das forum hat die escape-slashes weg-formatiert.
      nun ist die funktion so, wie ich sie habe!
      GLORIA PERPETUA

      Kommentar


      • #4
        hat keiner eine idee?

        hab nämlich schon wieder ein neues problem mit der liste.
        wie in dem beispiel oben geschrieben klappt es ja (bis auf die "<li></li> punkt1" sache)
        ganz gut. aber NUR solange der ganze string in der <teaxtarea> in EINER zeile geschrieben ist!
        sobald dazwischen irgendwo ein zeilenumbruch eingegeben wurde, trifft der pattern
        nicht mehr zu!

        ich habe schon die regObj.Multiline = True gesetzt (das entspricht in PHP glaub ich
        den angehängten parametern /S/s oder so) aber trotzdem trifft es nicht zu.

        hat einer dazu auch noch eine idee?! (langsam kotzen mich diese pattern total an *grr*)

        danke.
        GLORIA PERPETUA

        Kommentar

        Lädt...
        X