Program DZ;
{$mode objfpc}
uses
  classes,
  regexpr, sysutils, strutils;

var
  re: TRegExprEngine;
  s, subs, sLink, f_n: AnsiString;
  ok: boolean;
  index, len: longint;

  sL_In, sL_Out: TStringList;

begin
  sL_In := TStringList.Create;
  sL_Out := TStringList.Create;

  try
    write('Enter file name: '); readln(f_n);
    sL_In.LoadFromFile(f_n);

    s := StringReplace(
           StringReplace(sL_In.Text, 'www.', 'http://www.', [rfReplaceAll]),
           'http://http://', 'http://', [rfReplaceAll]
         );
    ok := GenerateRegExprEngine('http://([\w+?\.\w+])+([a-zA-z0-9\~\!\@\#\$\%\^\&\*\(\)\_\-\=\+\\\/\?\.\:\;\"\,]*)?',[],re);

    if not ok then writeln('error: init regexp')
    else
    begin
     subs := s;

     while Length (subs) > 0 do
     begin
       if RegExprPos(re, PChar(subs), index, len) then
       begin
         sLink := Copy(subs, index + 1, len);
         if sL_Out.IndexOf(sLink) = -1 then
         begin
           sL_Out.Add(sLink);
           writeln(sLink);
         end;

         subs := RightStr(subs, Length(subs) - index - len);
       end

       else
         break;
     end;

     DestroyRegExprEngine(re);

     write('File name to store results: '); readln(f_n);
     sL_Out.SaveToFile(f_n);
    end;

   finally
     sL_Out.Free;
     sL_In.Free;
   end;
end.