А вот такое будет правильно работать?
Код:
function DelUseless(Data, BegTeg, EndTeg: string): string;
var
i: integer;
f1, f2, f3, f4: boolean;
begin
if Length(Data) = 0 then Exit;
Result:= ''; f1:= false; f2:= false; f3:= false; f4:= false;
for i := 1 to Length(Data) do
begin
if (Data[i] = BegTeg[1]) and (not f1)
and (copy(Data, i, Length(BegTeg) - 1) =
copy(BegTeg, 1, Length(BegTeg) - 1)) then f1:= true;
if (Data[i] = BegTeg[Length(BegTeg)]) and (f1) then f2:= true;
if (Data[i] = EndTeg[1]) and (f1) and (f2) and (not f3)
and (copy(Data, i, Length(EndTeg) - 1) =
copy(EndTeg, 1, Length(EndTeg) - 1))then f3:= true;
if (Data[i] = EndTeg[Length(EndTeg)]) and (f1) and (f2) and (f3) then
begin
f1:= false; f2:= false; f3:= false; f4:= true;
end;
if (not f1)and(not f2)and(not f3)and(not f4) then Result:= Result + Data[i];
if f4 then f4:= false;
end;
end;
Здесь только нет обработки ошибки (по выходу копой за размерчик входной строки). Использование:
Код:
Edit1.Text:=
DelUseless('1<script 3007876>2</script 89008097>3 4<script defwwww>5</script hhhthtrew>6','<script>','</script>');
Символы "<" и ">" - заменяемо-основные, вдруг какие другие попадутся.
З.Ы. Циклом всё же медленнее, с while можно сразу пропустить лишние интерации, а с for такое не прокатит.