Tiens voila ^^
J'ai fait le truc des parenthèses capturante. Tu vas être content ça fais tout en une fois xD
Il n'y a normalement pas d'API, ce devrait être cross platforme !
Code : Tout sélectionner
ImportC ""
  pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport
Structure List_Extraction
	Array Extract.s(0)
EndStructure
Procedure.s BackrefReplaceRegularExpression(regexp_handle, string.s, replacement.s, maximum_reference.l = 10) ; 0 <= maximum_reference <= 99
	Static Dim pcre_results(202)
	
	depart = 0
	
	While pcre_exec(PeekL(regexp_handle), 0, string, Len(string), depart, 0, @pcre_results(), 202) > 0
		; pcre_exec(PeekL(regexp_handle), 0, string, Len(string), pcre_results(1), 0, @pcre_results(), 202)
		rpl.s = replacement
		
		p = pcre_results(0)
		q = pcre_results(1)
		If FindString(replacement,"$0", 1)
			rpl = ReplaceString(rpl, "$0", PeekS(@string + p, q - p))
			
		EndIf
		
		tableau_ref = 2
		
		For _a = 1 To maximum_reference
			tag$ = "$" + Str(_a)
			
			If FindString(replacement, tag$, 1)
				p1 = pcre_results(tableau_ref)
				q1 = pcre_results(tableau_ref + 1)
				rpl = ReplaceString(rpl, tag$, PeekS(@string + p1, q1 - p1))
				
			EndIf
			
			tableau_ref + 2
		Next
		
		;       If FindString(replacement,"\2",1)
		;       	p1=pcre_results(4)
		;       	q1=pcre_results(5)
		;       	rpl=ReplaceString(rpl,"\2",PeekS(@string+p1,q1-p1))
		;       EndIf
		;       If FindString(replacement,"\3",1)
		;          p1=pcre_results(6)
		;          q1=pcre_results(7)
		;          rpl=ReplaceString(rpl,"\3",PeekS(@string+p1,q1-p1))
		;       EndIf
		
		depart = p + Len(rpl)
		
		string = Left(string, p) + rpl + Right(string, Len(string) - q)
	Wend
	
	ProcedureReturn string
EndProcedure
Procedure.s BackrefExtractRegularExpression(regexp_handle, string.s, Array Extract.b(1), List Resultat.List_Extraction()) ; 0 <= Taille tableau Extract <= 99
	Static Dim pcre_results(202)
	
	depart = 0
	
	maximum_reference = ArraySize(Extract())
	
	ClearList(Resultat())
	
	While pcre_exec(PeekL(regexp_handle), 0, string, Len(string), depart, 0, @pcre_results(), 202) > 0
		; pcre_exec(PeekL(regexp_handle), 0, string, Len(string), pcre_results(1), 0, @pcre_results(), 202)
		
		AddElement(Resultat())
		Dim Resultat()\Extract(maximum_reference)
		
		p = pcre_results(0)
		q = pcre_results(1)
		If Extract(0) = #True
			Resultat()\Extract(0) = PeekS(@string + p, q - p)
		EndIf
		
		tableau_ref = 2
		
		For _a = 1 To maximum_reference
			
			If Extract(_a) = #True
				p1 = pcre_results(tableau_ref)
				q1 = pcre_results(tableau_ref + 1)
				
				Resultat()\Extract(_a) = PeekS(@string + p1, q1 - p1)
			EndIf
			
			tableau_ref + 2
		Next
		
		depart = p ; + Len(rpl)
		
; 		string = Left(string, p) + rpl + Right(string, Len(string) - q)
		string = Left(string, p) + Right(string, Len(string) - q)
	Wend
	
	ProcedureReturn string
EndProcedure
REGEX$ = " t(.*?)e(.*?) "
rh = CreateRegularExpression(0, REGEX$)
CHAINE$ = "As they functions tried importing them through the tset "
Debug "#### Test de remplacement Recurrent :"
Debug ""
Debug "Chaine de départ :"
Debug CHAINE$
Debug "Regex = ||" + REGEX$ + "||"
Debug ""
Debug "Résultat :"
Debug BackrefReplaceRegularExpression(rh, CHAINE$, "________$0")
Dim tableau_extraction.b(2)
NewList Result.List_Extraction()
For a = 0 To 2
	tableau_extraction(a) = #True
Next
BackrefExtractRegularExpression(rh, CHAINE$, tableau_extraction(), Result())
Debug ""
Debug ""
Debug "#### Test d'extraction Recurrente :"
Debug ""
Debug "Chaine de départ :"
Debug CHAINE$
Debug "Regex = ||" + REGEX$ + "||"
Debug ""
Debug "Valeurs extraites :"
Debug ""
b = 0
ForEach Result()
	Debug "Occurence " + Str(b)
	
	For a = 0 To 2
		Debug "$" + Str(a) + " = " + Result()\Extract(a)
	Next
	
	b + 1
Next
Donc avec ta regex et ta chaine à tester ça donnerais : 
Code : Tout sélectionner
;{ Lib Backref Replace / Extract
ImportC ""
  pcre_exec(*pcre,*extra,subject.s,length,startoffset,options,*ovector,ovecsize)
EndImport
Structure List_Extraction
	Array Extract.s(0)
EndStructure
Procedure.s BackrefReplaceRegularExpression(regexp_handle, string.s, replacement.s, maximum_reference.l = 10) ; 0 <= maximum_reference <= 99
	Static Dim pcre_results(202)
	
	depart = 0
	
	While pcre_exec(PeekL(regexp_handle), 0, string, Len(string), depart, 0, @pcre_results(), 202) > 0
		; pcre_exec(PeekL(regexp_handle), 0, string, Len(string), pcre_results(1), 0, @pcre_results(), 202)
		rpl.s = replacement
		
		p = pcre_results(0)
		q = pcre_results(1)
		If FindString(replacement,"$0", 1)
			rpl = ReplaceString(rpl, "$0", PeekS(@string + p, q - p))
			
		EndIf
		
		tableau_ref = 2
		
		For _a = 1 To maximum_reference
			tag$ = "$" + Str(_a)
			
			If FindString(replacement, tag$, 1)
				p1 = pcre_results(tableau_ref)
				q1 = pcre_results(tableau_ref + 1)
				rpl = ReplaceString(rpl, tag$, PeekS(@string + p1, q1 - p1))
				
			EndIf
			
			tableau_ref + 2
		Next
		
		;       If FindString(replacement,"\2",1)
		;       	p1=pcre_results(4)
		;       	q1=pcre_results(5)
		;       	rpl=ReplaceString(rpl,"\2",PeekS(@string+p1,q1-p1))
		;       EndIf
		;       If FindString(replacement,"\3",1)
		;          p1=pcre_results(6)
		;          q1=pcre_results(7)
		;          rpl=ReplaceString(rpl,"\3",PeekS(@string+p1,q1-p1))
		;       EndIf
		
		depart = p + Len(rpl)
		
		string = Left(string, p) + rpl + Right(string, Len(string) - q)
	Wend
	
	ProcedureReturn string
EndProcedure
Procedure.s BackrefExtractRegularExpression(regexp_handle, string.s, Array Extract.b(1), List Resultat.List_Extraction()) ; 0 <= Taille tableau Extract <= 99
	Static Dim pcre_results(202)
	
	depart = 0
	
	maximum_reference = ArraySize(Extract())
	
	ClearList(Resultat())
	
	While pcre_exec(PeekL(regexp_handle), 0, string, Len(string), depart, 0, @pcre_results(), 202) > 0
		; pcre_exec(PeekL(regexp_handle), 0, string, Len(string), pcre_results(1), 0, @pcre_results(), 202)
		
		AddElement(Resultat())
		Dim Resultat()\Extract(maximum_reference)
		
		p = pcre_results(0)
		q = pcre_results(1)
		If Extract(0) = #True
			Resultat()\Extract(0) = PeekS(@string + p, q - p)
		EndIf
		
		tableau_ref = 2
		
		For _a = 1 To maximum_reference
			
			If Extract(_a) = #True
				p1 = pcre_results(tableau_ref)
				q1 = pcre_results(tableau_ref + 1)
				
				Resultat()\Extract(_a) = PeekS(@string + p1, q1 - p1)
			EndIf
			
			tableau_ref + 2
		Next
		
		depart = p ; + Len(rpl)
		
; 		string = Left(string, p) + rpl + Right(string, Len(string) - q)
		string = Left(string, p) + Right(string, Len(string) - q)
	Wend
	
	ProcedureReturn string
EndProcedure
;}
REGEX$ = "^HTTP.+\s(([0-9])[0-9][0-9])\s"
CHAINE$ = "HTTP/1.1 200 OK"
RegHandle = CreateRegularExpression(0, REGEX$)
; on crée le tableau pour extraire les parenthèses que l'on veux
Dim Tableau_Extraction.b(2)
; on n'oublie pas de paramétrer le tableau !!
For a = 1 To 2 ; on ne met pas 0 car on n'a pas besoin de $0
	Tableau_Extraction(a) = #True
Next
; on crée la liste pour récupérer les résultats
NewList Resultat.List_Extraction()
; effectue l'extraction :
BackrefExtractRegularExpression(RegHandle, CHAINE$, Tableau_Extraction(), Resultat())
; on affiche les resultats :
Debug "Chaine de départ :"
Debug CHAINE$
Debug "Regex = ||" + REGEX$ + "||"
Debug ""
Debug "Valeurs extraites :"
Debug ""
b = 0
ForEach Resultat()
	Debug "Occurence " + Str(b)
	
	For a = 0 To ArraySize(Resultat()\Extract())
		Debug "$" + Str(a) + " = " + Resultat()\Extract(a)
	Next
	
	b + 1
Next
Et voila ^^