Christian S.: Reg. Ausdruck um Strings zu finden

Hi,

ich suche nach einem regulären Ausdruck, der mir Strings findet.

Ein string ist eingeschlossen durch "". An sich erst mal ja kein Problem.

Das Problem ist nur, wenn innerhalb des Strings das " escaped wird.

also folgendes ist ja auch ein String:

" ... " ... "

Das zu erkennen krieg ich auch noch hin.

Was ich aber nicht hinkriege ist zu erkennen, ob vor einem " eine ungerade Anzahl von \ vorkommt, die dann das " escapen würden. Oder eine gerade Anzahl, die den String terminieren würden.

Könnt ihr mir da helfen?

Gruß
Christian

  1. Hellihello Christian,

    finden sich denn vor und hinter den Delimitern zB noch Leezeichen?

    Folgt dem Delimiter " immer erstmal ein Buchstabe?

    Kannst Du die escapten " nicht vorher erstmal neutralisieren?

    str_replace ("\"","°°°°",$my_var);

    und später wieder komplettieren?
    Gruß,

    frankx

  2. Hello out there!

    Was ich aber nicht hinkriege ist zu erkennen, ob vor einem " eine ungerade Anzahl von \ vorkommt,

    (?:\\)*\"

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hello out there!

      Was ich aber nicht hinkriege ist zu erkennen, ob vor einem " eine ungerade Anzahl von \ vorkommt,

      (?:\\)*\"

      See ya up the road,
      Gunnar

      danke, die Idee ist schon ganz gut... Leider klappts bei mir noch nicht ganz, aber ich denke das werd ich hinkriegen...

  3. Tag,

    Das Problem ist nur, wenn innerhalb des Strings das " escaped wird.

    also folgendes ist ja auch ein String:

    " ... " ... "

    vielleicht so ...

      
    /([\"\'])([^\1]*?)[^\\](\\\\)*\1/  
    
    

    Grüße,
    Steffen.

    1. Tag,

      Das Problem ist nur, wenn innerhalb des Strings das " escaped wird.

      also folgendes ist ja auch ein String:

      " ... " ... "

      vielleicht so ...

      /(["'])([^\1]?)^\\1/

      
      >   
      > Grüße,  
      > Steffen.  
        
      Klappte nicht... Ich habs jetzt für mich so gelöst (in PHP):  
        
      /".\*?(?<!\\\)(\\\\\\\)\*"/  
        
      Also es fängt an mit " dann kommen beliebige Zeichen (non-greedy).  
      dann kommt eine gerade Anzahl von \ also \\ oder \\\\ (oder 0) gefolgt von einem ", vor denen jedes Zeichen außer einem \ stehen darf ((?<!\\\)), was die \ Anzahl ja wieder ungerade machen würde.  
        
      Gruß!