Podrías usar una expresión regular para hacer la busqueda.
Código Delphi
[-]
function BuscarPattern(Pattern, Input: string): string;
var
i: integer;
lRegex: TRegEx;
begin
Result := '';
lRegex.Create(Pattern, [roIgnoreCase]);
if lRegex.IsMatch(Input) then
for i := 0 to lRegex.Matches(Input).Count - 1 do
Result := Result + lRegex.Matches(Input)[i].Value;
end;
El valor de búsqueda lo conviertes a un pattern válido. Por ej, "abc" podría ser "[a]|[b]|[c]". De esa manera encontrará "acab" de "acabo"
Ejemplo colores hexadecimales:
Texto de busqueda: "#0123456789ABCDEF"
Pattern: "[#]|[0]|[1]|[2]|[3]|[4]|[5]|[6]|[7]|[8]|[9]|[A]|[b]|[C]|[D]|[E]|[F]" (Que podría resumirse en "[#]|[0-9]|[A-F]")
Resultados
Código:
ORIGEN RESULTADO
-#ffff00., #ffff00
-#e5e500[] #e5e500
-#cccc00`^ #cccc00
-#b2b200{} #b2b200
-#ff0000% #ff0000
-#e50000$ #e50000
-#cc0000" #cc0000
-#b20000! #b20000
-#0000ffq #0000ff
-#1919ffw #1919ff
-#3232ffr #3232ff
-#4c4cfft #4c4cff