Option
Explicit
Public
Sub
Test()
Dim
vntExpr
As
Variant
Dim
vntTokenList, vntToken, vntItem
vntExpr = Array(
"Apfel100gelb"
,
"Äpfel98ge lb"
,
"Ap-fel1.00Farbegelb"
)
For
Each
vntItem
In
vntExpr
Debug.Print
">> Expression '"
;
CStr
(vntItem);
"' contains ["
;
CStr
(ExtractTokens(vntItem, vntTokenList));
"] tokens <<"
For
Each
vntToken
In
vntTokenList
Debug.Print Spc(2);
">> '"
; vntToken &
"'"
Next
Next
End
Sub
Public
Function
ExtractTokens(
ByVal
Expression
As
Variant
,
ByRef
TokenList
As
Variant
)
As
Long
Dim
c
As
String
* 1
Dim
t, b, i&
b = Array(
False
,
False
,
False
)
For
i = 1
To
Len(Expression)
c = Mid$(Expression, i, 1)
Select
Case
LCase$(c)
Case
"a"
To
"z"
,
"ä"
,
"ö"
,
"ü"
,
"ß"
b = Array(b(LBound(b) + 1),
True
,
True
)
Case
"0"
To
"9"
b = Array(b(LBound(b) + 1),
False
,
True
)
Case
Else
b(LBound(b) + 2) =
False
End
Select
If
(i > 1)
And
(b(LBound(b) + 0)
Xor
b(LBound(b) + 1))
And
b(LBound(b) + 2)
Then
t = t & vbNullChar
If
b(LBound(b) + 2)
Then
t = t & c
Next
TokenList = Split(t, vbNullChar)
ExtractTokens = UBound(TokenList) - LBound(TokenList) + 1
End
Function