split.s: Regex: BBCode parsen

Hab hier einen einfachen BBCode-Regex.

  
my @allowedTags = ('b', 'i');  
  
for (@allowedTags) {  
   $text =~ s{  
      \[$_\](.+?)\[$_\]  
   } {  
      replace($_,$1)  
   }egsx;  
}  

Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:
[$_](.+?)[$_]

Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:

^[code].*[$_](.+?)[$_].*^[code]

Bin allerdings wie man sieht nicht so der regex-könner :D

  1. Hab hier einen einfachen BBCode-Regex.

    my @allowedTags = ('b', 'i');

    for (@allowedTags) {
       $text =~ s{
          [$](.+?)[$]
       } {
          replace($_,$1)
       }egsx;
    }

    
    >   
    > Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:  
    > \[$\_\](.+?)\[$\_\]  
    >   
    > Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:  
    >   
    > ^\[code\].\*\[$\_\](.+?)\[$\_\].\*^\[code\]  
      
    Wenn jeder Code in jedem Code geparst werden soll, musst du rekursiv parsen.  
      
    Deine Regex finde ich übrigens seltsam. du matcht auf [b]text[b]  
    wo du eventuell [b]text[/b] meinst  
      
    mfg Beat
    
    -- 
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    
    
    1. Hab hier einen einfachen BBCode-Regex.

      my @allowedTags = ('b', 'i');

      for (@allowedTags) {
         $text =~ s{
            [$](.+?)[$]
         } {
            replace($_,$1)
         }egsx;
      }

      
      > >   
      > > Meine Frage betrifft aber eher nur den Regex bzw. das Suchmuster:  
      > > \[$\_\](.+?)\[$\_\]  
      > >   
      > > Wie ist es möglich, dass das Suchmuster sich nur angesprochen fühlt, wenn es NICHT innerhalb von [code] steht? Ich bräuchte also im prinzip sowas:  
      > >   
      > > ^\[code\].\*\[$\_\](.+?)\[$\_\].\*^\[code\]  
      >   
      > Wenn jeder Code in jedem Code geparst werden soll, musst du rekursiv parsen.  
      >   
      > Deine Regex finde ich übrigens seltsam. du matcht auf [b]text[b]  
      > wo du eventuell [b]text[/b] meinst  
      >   
      > mfg Beat  
        
      Sorry, da ist auch ein Schreibfehler drin. Es muss heissen:  
      \[$\_\](.+?)\[/$\_\]  
        
        
      Nun meine nächste Frage: Wie meinst du das mit rekursives parsen?
      
      1. 你好 split.s,

        Nun meine nächste Frage: Wie meinst du das mit rekursives parsen?

        Dass es mit einem Regex so einfach nicht geht. Du musst mindestens mit einer Stackmaschine arbeiten. Aber ich würde dir einfach zu einem der BBCode-Module raten.

        再见,
         克里斯蒂安

        --
        http://wwwtech.de/
        WWWTech.de | Wayne Revived
        Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.