Unerklärliches Verhalten einer RegExp Backreference in ASP

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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*
    Last edited by deklarmart; 27-05-2005, 14: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

    Comment


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

      Comment


      • #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

        Comment

        Working...
        X