Search code examples
parsingdelphifiremonkeyindydelphi-10.4-sydney

How to extract domain suffix?


How can I extract domain suffix without entering http:// or https://? For example, if I enter stackoverflow.com, I want to get the result of com.

I have this function, but I must enter http:// to get the result.

Is there any way to skip entering http:// and https://?

procedure TForm1.Button2Click(Sender: TObject);
  function RatChar(S:String; C: Char):Integer;
  var
    i : Integer;
  begin
    i := Length(S);
    //while (S[i] <> C) and (i > 0) do
    while (i > 0) and (S[i] <> C) do
      Dec(i);
    Result := i;
  end;
var
  uri: TIdURI;
  i: Integer;
begin
  uri := TidURI.Create(Edit2.Text);
  try
    //Memo1.Lines.Add(uri.Protocol);
    //Memo1.Lines.Add(uri.Host);
    i := RatChar(uri.Host, '.');
    Memo1.Lines.Add(Copy(uri.Host, i+1, Length(uri.Host)));
    Memo1.Lines.Add(uri.Document);
  finally
    uri.Free;
  end;
end;

Solution

  • uses
      System.SysUtils;
    var
      u  : string;
      arr: TArray<string>;
    begin
      try
       u   := 'https://stackoverflow.com/questions/71166883/how-to-extract-domain-suffix';
       arr := u.Split(['://'], TStringSplitOptions.ExcludeEmpty);
       u   := arr[High(arr)]; //stackoverflow.com/questions/71166883/how-to-extract-domain-suffix';
       arr := u.Split(['/'], TStringSplitOptions.ExcludeEmpty);
       u   := arr[0]; //stackoverflow.com
       arr := u.Split(['.'], TStringSplitOptions.ExcludeEmpty);
       u   := arr[High(arr)]; //com
       writeln('Top-Level-Domain: ', u);
       readln;
     except
       on E: Exception do
         Writeln(E.ClassName, ': ', E.Message);
     end;