Aktuelle Zeit: 24.04.2018 02:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: String mit regulärem Ausdruck splitten?
BeitragVerfasst: 05.10.2017 22:02 
Offline

Registriert: 25.02.2014 22:00
Zitat:
im englischen forum war vor kurzem eine aehnliche frage, da wollte jemand sowas parsen (leerzeichen-getrennte liste aus [geschachtelten] funtionsaufrufen) :

Nicht jemand aber selbst mestnyi.
Vielleicht war ich zu spät, ich war weg.
mit einem regulären Ausdruck:
Code:
EnableExplicit

Enumeration RegularExpression
  #RegEx_Function
  #RegEx_Arguments
EndEnumeration

#RegEx_Pattern_Function = ~"(?:(\\w*)\\s*\\(((?>[^()]|(?R))*)\\))"
#RegEx_Pattern_Arguments = ~"((?:(?:(;).*|\".*?\"|(\\().*?\\))|\\s*\\=\\s*|[^,\\s])+)"

Define Create_Reg_Flag = #PB_RegularExpression_NoCase | #PB_RegularExpression_MultiLine | #PB_RegularExpression_Extended| #PB_RegularExpression_DotAll   

If CreateRegularExpression(#RegEx_Function, #RegEx_Pattern_Function, Create_Reg_Flag) And
   CreateRegularExpression(#RegEx_Arguments, #RegEx_Pattern_Arguments, Create_Reg_Flag)
EndIf

Procedure.s Extract(String$)
   
  With *This
    If ExamineRegularExpression(#RegEx_Function, String$)
      While NextRegularExpressionMatch(#RegEx_Function)
        String$ = Trim(RegularExpressionGroup(#RegEx_Function, 2))
       
        If ExamineRegularExpression(#RegEx_Arguments, String$)
          While NextRegularExpressionMatch(#RegEx_Arguments)
            Debug RegularExpressionMatchString(#RegEx_Arguments)
          Wend
        EndIf
       
      Wend
    EndIf
  EndWith
 
EndProcedure

;Extract(~"ProcedureDLL myProcedure(p1, p2, p3.s = \"4,2\") ; just a comment, one, two, three")
;Extract(~"ProcedureDLL myProcedure(p1, p2, p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")
;Extract(~"ProcedureDLL myProcedure(p1, p2 = 3.14, p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")
Extract(~"ProcedureDLL myProcedure(p1, p2 = GetString(\"3,14\", \"Test\", 42), p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")


Code:
EnableExplicit

Enumeration RegularExpression
  #RegEx_Function
  #RegEx_Arguments
EndEnumeration

#RegEx_Pattern_Function = ~"(?:(\\w*)\\s*\\(((?>[^()]|(?R))*)\\))"
#RegEx_Pattern_Arguments = "("+#RegEx_Pattern_Function+~"|\".*?\"|\\w*\\.*\\w*\\s*\\=*\\s*\\w*)+"

Define Create_Reg_Flag = #PB_RegularExpression_NoCase | #PB_RegularExpression_MultiLine | #PB_RegularExpression_Extended| #PB_RegularExpression_DotAll   

If CreateRegularExpression(#RegEx_Function, #RegEx_Pattern_Function, Create_Reg_Flag) And
   CreateRegularExpression(#RegEx_Arguments, #RegEx_Pattern_Arguments, Create_Reg_Flag)
EndIf

Procedure.s Extract(String$)
  Protected Result$, ID, Index, Value.f, Param1, Param2, Param3, Param1$
  Protected operand$, val$
 
  With *This
    If ExamineRegularExpression(#RegEx_Function, String$)
      While NextRegularExpressionMatch(#RegEx_Function)
        String$ = Trim(RegularExpressionGroup(#RegEx_Function, 2))
       
        If ExamineRegularExpression(#RegEx_Arguments, String$)
          While NextRegularExpressionMatch(#RegEx_Arguments)
            If RegularExpressionMatchString(#RegEx_Arguments)
              Debug Trim(RegularExpressionMatchString(#RegEx_Arguments))
            EndIf
          Wend
        EndIf
       
      Wend
    EndIf
  EndWith
 
  ProcedureReturn Result$
EndProcedure

;Extract(~"ProcedureDLL myProcedure(p1, p2, p3.s = \"4,2\") ; just a comment, one, two, three")
;Extract(~"ProcedureDLL myProcedure(p1, p2, p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")
;Extract(~"ProcedureDLL myProcedure(p1, p2 = 3.14, p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")
Extract(~"ProcedureDLL myProcedure(p1, p2 = GetString(\"3,14\", a(b(),c()), 42), p3.s = \"4,2\", p4.s = GetValue(8)) ; just a comment, one, two, three")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: String mit regulärem Ausdruck splitten?
BeitragVerfasst: 06.10.2017 14:39 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
Bevor hier noch mehr über Reguläre Ausdrücke gepostet wird ... :mrgreen:

Die Aufgabenstellung von Kiffi ist ein gutes Beispiel für Probleme, die mit Code ohne Reguläre Ausdrücke besser gelöst werden können. Kurzer hat das ja sehr schön demonstriert.

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye