XbpCRE Problem

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

XbpCRE Problem

Beitrag von georg »

Guten Morgen,


für ein aktuelles Problem erscheint mir die Verwendung von regulären Ausdrücken der richtige Lösungsansatz, also habe ich mir von Alaska die XbpCRE geholt und neu compiliert, da ich mit 1.90 (355) arbeite.

Aktuell brauche ich aus einer HTML-Seite alle externen Links:

Code: Alles auswählen

#INCLUDE "AppEvent.CH"
#INCLUDE "FileIO.CH"
#INCLUDE "Xbp.CH"

#INCLUDE "XbpCRE.CH"

FUNCTION Main()
	Local cData, cRes
	Local nHandle, nSize, nMatch, nStart, nLen
	Local oReg

	nHandle := fOpen("submitres.html", FO_READ)
	IF nHandle < 1
		ConfirmBox(, "Could not open input file", "Error", XBPMB_OK, XBPMB_CRITICAL)
		QUIT
	ENDIF
	nSize := fSize(nHandle)
	cData := Space(nSize)
	fRead(nHandle, @cData, nSize)
	fClose(nHandle)

	// oReg := RegExp():new('<a href="http.*</a', PCRE_CASELESS)
	oReg := RegExp():new("http:", PCRE_CASELESS)
	nMatch := oReg:exec(cData)
	IF nMatch > 0
		nStart := oReg:result(1)[1]
		nLen := oReg:result(1)[2]
		cRes := Substr(cData, nStart, nLen)
		ConfirmBox(, cRes + Chr(10) + Str(nMatch), "Result", XBPMB_OK, XBPMB_INFORMATION)
		nMatch := oReg:exec(cData, nStart + nLen + 1)
	ENDIF
RETURN (cRes)
Die Datei enthält ca. 10 externe Links, ich erhalte aber nur den ersten, d.h. nMatch ist beim ersten Aufruf 1. Der zweite Aufruf (nach ConfirmBox()), erhält wieder einen Match, nämlich weiter hinten in der Datei.

Ausgehend von der Dokumentation sollte nMatch aber die Anzahl aller Treffer liefern, und nicht iterativ abgearbeitet werden:
Returns:

On an error, the return value is negative. If positive or zero, it represents the total number of matches found.
Kann mir einer von Euch, der etwas mehr Erfahrung mit XbpCRE hat, hierzu etwas sagen? Denn das zweite Beispiel in der Dokumentation für RegExp() selbst scheint auf ein iterativ abzurufendes Ergebnis hinzudeuten.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten