[RegEx] Hyperlink mit A-Tag umschließen (http://www....)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

[RegEx] Hyperlink mit A-Tag umschließen (http://www....)

Beitrag von TomS »

Hallo.
Endlich komme ich mal dazu die RegEx-Lib zu probieren. Ich musste zwar meine ganzen PHP-Tests neuschreiben, weil preg_replace() unter php ganz anders arbeitet, aber ich hab doch das meiste geschafft.

Jetzt hab ich aber ein Problem mit der Umwandlung von URLs in HTML-Code.

Ich hab 2 RegExe (:?:) erstellt:

Der eine wandelt alles um, was so aussieht: protokoll://adresse
Beispielsweise: ftp://user:pass@server.tld/dir/

Code: Alles auswählen

CreateRegularExpression(1, "[a-zA-Z0-9]{1,}://[a-zA-Z0-9@.:/]{1,}")
		Dim Result$(0)
    	NbFound = ExtractRegularExpression(1, string$, Result$())
    	For k = 0 To NbFound-1
    		string$=ReplaceString(string$,Result$(k),"<a target='blank' href='"+linkadresse$+"'>"+linkadresse$+"</a>")
    	Next
Der andere wandelt die Weblinks von schreibfaulen Leuten um: www.meinedomain.tld (also ohne Protokollkennung)

Code: Alles auswählen

CreateRegularExpression(2, "www\.[a-zA-Z0-9]{1,}\.[a-zA-Z]{2,}")
		Dim Result$(0)
    	NbFound = ExtractRegularExpression(2, string$, Result$())
    	For k = 0 To NbFound-1
			string$=ReplaceString(string$,Result$(k),"<a target='blank' href='http://"+Result$(k)+"'>"+Result$(k)+"</a>")
    	Next
Wenn string$ so aussieht:
Bla blubb http://iwas.tld dupdudap www.iwas.tld
Dann gibt's kein Problem.

Aber wenn beide RegEx-Funktionen greifen: http://www.iwas.tld

Die Ausgabe sieht dann so aus:

Code: Alles auswählen

http://http://www.iwas.de'>www.iwas.de 
Und derQuelltext:

Code: Alles auswählen

http://<a target='blank' href='<a target='blank' href='http://www.iwas.de'>http://www.iwas.de</a>'>www.iwas.de</a> 

Hat vielleicht jemand, eine Idee, wie man dieses Problem beheben könnte? Vielleicht mit einem einzigen RegEx?

Danke schonmal.

PS: Das mit href='iwas' anstatt href="iwas" ist mir bewusst. Ich war grade bloß zu faul über all Chr(32) einzufügen. Für das Problem hier, ist es ja irrelevant.