ZeHa hat geschrieben:Doch das müßte schon gehen, bin zwar kein Regex-Experte, aber da in Deinem Beispiel immer eine Zahl kommt und danach der gesuchte String, der unter Umständen eingeklammert ist, müßte sich damit eine Regex basteln lassen, die "String nach Zahl, umgeben von Leerzeichen und möglicherweise eingeklammert" findet und extrahiert.
Aber wie gesagt, kenne mich da nicht so gut damit aus. Und es könnte sein daß dann immer die Zahl mit angegeben wird, dann müßte man in den temporär extrahierten Strings (also "12 VW", "13 (AUDI)" und "14 BMW") einfach nochmal 'ne Regex ausführen, die nur Text findet, also Zahlen und Sonderzeichen ignoriert, diese gibt Dir dann letztendlich nur noch "VW", "AUDI" und "BMW".
Du kannst immer nur einen String bekommen, im Fall des Datum muesste
man nur "\d+" schreiben um alle Zahlen extra auslesen zu koennen, nur
dann darf da auch nichts anderes mehr stehen, was regex recht sinnlos macht.
Genauso sinnlos ist es erst einen Teilstring auszulesen und ihn dann
nocheinmal durchlaufen lassen.
Beispiel :
PB :
Code: Alles auswählen
subject.s = "12-31-1901 31"+#LF$+"10-12-1914 12"
pattern.s = "(\d+)-(\d+)-(\d+)"
If CreateRegularExpression(0, pattern)
Dim Result$(0)
NbFound = ExtractRegularExpression(0, subject, Result$())
For k = 0 To NbFound-1
Debug Result$(k)
Next
Else
Debug RegularExpressionError()
EndIf
Code: Alles auswählen
subject.s = "12-31-1901 31"+#LF$+"10-12-1914 12"
pattern.s = "\d+"
If CreateRegularExpression(0, pattern)
Dim Result$(0)
NbFound = ExtractRegularExpression(0, subject, Result$())
For k = 0 To NbFound-1
Debug Result$(k)
Next
Else
Debug RegularExpressionError()
EndIf
Beide liefern kein ausreichendes Ergebnis .
bemueht man dagegen PCRE selber, sieht das dann in etwa so aus:
Code: Alles auswählen
ImportC ""
pcre_exec(*pcre, *extra, subject.s, length, startoffset, options, *ovector, ovecsize)
pcre_get_substring(subject.s, *ovector, stringcount, stringnumber, *stringptr)
pcre_free_substring(*stringptr)
EndImport
subject.s = "12-31-1901 31"+#LF$+"10-12-1914 12"
pattern.s = "(\d+)-(\d+)-(\d+)"
len = Len(subject)
Dim ovec(30)
regex = CreateRegularExpression(#PB_Any, pattern)
While pcre_exec(PeekL(regex), 0, subject, len, offset, 0, @ovec(), 30)>0
; Debug PeekS(@subject + ovec(2),ovec(3)-ovec(2)) ; 2 start offset first sub - 3 end offset
; Debug PeekS(@subject + ovec(4),ovec(5)-ovec(4)) ; 4 start offset second sub - 5 end offset
; Debug PeekS(@subject + ovec(6),ovec(7)-ovec(6)) ; 6 start offset third sub - 7 end offset
; Debug "-----"
pcre_get_substring(subject, ovec(), len, 1, @stringptr) ; first sub
Debug PeekS(stringptr)
pcre_free_substring(stringptr)
pcre_get_substring(subject, ovec(), len, 2, @stringptr)
Debug PeekS(stringptr)
pcre_free_substring(stringptr)
pcre_get_substring(subject, ovec(), len, 3, @stringptr)
Debug PeekS(stringptr)
pcre_free_substring(stringptr)
Debug "-----"
offset = ovec(1)
Wend
und hier nochmal mit dem Auto:
Code: Alles auswählen
subject.s = "12 VW 13 (AUDI) 14 BMW"
pattern.s = "([a-z]+)"
If CreateRegularExpression(0, pattern,1)
Dim Result$(0)
NbFound = ExtractRegularExpression(0, subject, Result$())
For k = 0 To NbFound-1
Debug Result$(k)
Next
Else
Debug RegularExpressionError()
EndIf