Hilfe bei regulärem Ausdruck

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Hilfe bei regulärem Ausdruck

Beitrag von Kiffi »

Hallo,

ich benötige Hilfe bei einem regulären Ausdruck.

Aus einer Zeichenkette soll 'DasHierBraucheIch' ermittelt werden.

'SchluesselWort' steht immer am Anfang einer Zeile. Allerdings können auch WhiteSpaces davor stehen.

Code: Alles auswählen

SchluesselWort("DasHierBraucheIch")
  SchluesselWort("DasHierBraucheIch") ; evtl. ein Kommentar
Wenn 'SchluesselWort' auskommentiert ist, soll es nicht gefunden werden:

Code: Alles auswählen

; SchluesselWort("DasHierBraucheIch")
;  SchluesselWort("DasHierBraucheIch") ; evtl. ein Kommentar
 ;  SchluesselWort("DasHierBraucheIch") ; evtl. ein Kommentar
Das hier habe ich bisher. Allerdings wird hier nur die gesamte Zeile zurückgeliefert (und nicht nur 'DasHierBraucheIch').

Code: Alles auswählen

Define MeinString.s

MeinString + "" + #CRLF$
MeinString + "SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "  SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "  ; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "" + #CRLF$

If CreateRegularExpression(0, "^[\s]*SchluesselWort\(['" + Chr(34) + "](.*?)['" + Chr(34) + "]\)", #PB_RegularExpression_MultiLine | #PB_RegularExpression_NoCase)
	If ExamineRegularExpression(0, MeinString)
		While NextRegularExpressionMatch(0)
			Debug RegularExpressionMatchString(0)
		Wend
	EndIf
EndIf
Danke im voraus & Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Hilfe bei regulärem Ausdruck

Beitrag von Bisonte »

ich habe immer noch probleme diese kryptischen Ausdrücke zu verstehen. Also mache ich mal Hausfrauenlogikmäßig das mal mit Stringoperationen.
Es MUSS ja mit einem Chr(34) enden, also

Code: Alles auswählen

Define MeinString.s
Define h.s, a

MeinString + "" + #CRLF$
MeinString + "SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "  SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "  ; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "" + #CRLF$

If CreateRegularExpression(0, "^[\s]*SchluesselWort\(['" + Chr(34) + "](.*?)['" + Chr(34) + "]\)", #PB_RegularExpression_MultiLine | #PB_RegularExpression_NoCase)
   If ExamineRegularExpression(0, MeinString)
      While NextRegularExpressionMatch(0)
        h = Mid(RegularExpressionMatchString(0), FindString(RegularExpressionMatchString(0), Chr(34), 1) + 1)
        h = ReverseString(h) : a = FindString(h, Chr(34), 1) : h = ReverseString(h)
        If a > 0 : h = Left(h, Len(h) - a) : EndIf
        Debug h
      Wend
   EndIf
EndIf 
zeigt zumindest in diesem content das richtige ergebnis, nehme ich an.
Ansonsten kann ich mir nur noch vorstellen, mit einer zweiten CreateRegularExpression() das : "DasHierBraucheIch" herauszuholen.
nachdem man die Leerzeichen eleminiert hat.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Hilfe bei regulärem Ausdruck

Beitrag von Kiffi »

Hallo Bisonte,

danke für Deine schnelle Hilfe! Ich bin ja auch eher einer, der mit Hausfrauen-Logik ( :allright: ) unterwegs ist. Mit Stringoperationen wäre das schnell erledigt.

Allerdings wollte ich in diesem Fall das Problem mit einem regulären Ausdruck gelöst haben. Dieses 'lookbehind assertion', welches ich eigentlich anwenden will, raubt mir noch den letzten Nerv. :|

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe bei regulärem Ausdruck

Beitrag von edel »

Ich hoffe ich hab dich richtig verstanden

Code: Alles auswählen

Define MeinString.s

MeinString + "" + #CRLF$
MeinString + "SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "  SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ")" + #CRLF$
MeinString + "  ; SchluesselWort(" + Chr(34) + "DasHierBraucheIch" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "" + #CRLF$

If CreateRegularExpression(0, "^[\s]*SchluesselWort\(['" + Chr(34) + "](.*?)['" + Chr(34) + "]\)", #PB_RegularExpression_MultiLine | #PB_RegularExpression_NoCase)
   If ExamineRegularExpression(0, MeinString)
      While NextRegularExpressionMatch(0)
         Debug RegularExpressionGroup(0, 1)
      Wend
   EndIf
EndIf
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Hilfe bei regulärem Ausdruck

Beitrag von Bisonte »

@edel: Gut dass Du erwähnt hast, dass dafür PB5.3 gebraucht wird ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Hilfe bei regulärem Ausdruck

Beitrag von Kiffi »

Good guy edel! Funktioniert bestens. Danke! :allright:

@Bisonte: 5.3 passt schon :)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe bei regulärem Ausdruck

Beitrag von edel »

Ach, 5.30 ist noch gar nicht draussen? :bounce:

Code: Alles auswählen

ImportC ""
  pb_pcre_exec(*pcre, *extra, subject.p-ascii, length, startoffset, options, *ovector, ovecsize)
  pb_pcre_get_substring(subject.p-ascii, *ovector, stringcount, stringnumber, *stringptr)
  pb_pcre_free_substring(*stringptr)
EndImport

Define MeinString.s

MeinString + "" + #CRLF$
MeinString + "SchluesselWort(" + Chr(34) + "DasHierBraucheIch1" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "  SchluesselWort(" + Chr(34) + "DasHierBraucheIch2" + Chr(34) + ")" + #CRLF$
MeinString + "; SchluesselWort(" + Chr(34) + "DasHierBraucheIch3" + Chr(34) + ")" + #CRLF$
MeinString + "  ; SchluesselWort(" + Chr(34) + "DasHierBraucheIch4" + Chr(34) + ") ; evtl. ein Kommentar" + #CRLF$
MeinString + "" + #CRLF$


pattern.s = "^[\s]*SchluesselWort\(['" + Chr(34) + "](.*?)['" + Chr(34) + "]\)"
len = Len(MeinString)

Dim ovec(99)

regex = CreateRegularExpression(#PB_Any, pattern, #PB_RegularExpression_MultiLine | #PB_RegularExpression_NoCase)

While pb_pcre_exec(PeekI(regex), 0, MeinString, len, offset, 0, @ovec(), 30) > 0
  
  pb_pcre_get_substring(MeinString, ovec(), len, 1, @stringptr) ; first sub
  Debug PeekS(stringptr, -1, #PB_UTF8)
  pb_pcre_free_substring(stringptr)  
    
  offset = ovec(1)
Wend

Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Hilfe bei regulärem Ausdruck

Beitrag von Derren »

Bisonte hat geschrieben:@edel: Gut dass Du erwähnt hast, dass dafür PB5.3 gebraucht wird ;)
Habe 5.22 LTS und ExamineRegularExpression() ist keine Funktion bei mir... Du und Kiffi benutzt die Funktion aber. Irgendwas stimmt doch hier nicht...
Signatur und so
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Hilfe bei regulärem Ausdruck

Beitrag von edel »

Das ist eine Funktion aus 5.30 (Beta).
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

Derren hat geschrieben:
Bisonte hat geschrieben:@edel: Gut dass Du erwähnt hast, dass dafür PB5.3 gebraucht wird ;)
Habe 5.22 LTS und ExamineRegularExpression() ist keine Funktion bei mir... Du und Kiffi benutzt die Funktion aber. Irgendwas stimmt doch hier nicht...
Bisonte hat geschrieben:edel: Gut dass Du erwähnt hast, dass dafür PB5.3 gebraucht wird ;)
Du brauchst dafür 5.30 um die Funktion nutzen zu können.
Zuletzt geändert von CodeCommander am 18.01.2015 14:25, insgesamt 1-mal geändert.
~ DELETE ~
Antworten