首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提取域名后缀?

如何提取域名后缀?
EN

Stack Overflow用户
提问于 2022-02-18 00:00:49
回答 2查看 291关注 0票数 0

如何在不输入http://https://的情况下提取域后缀?例如,如果输入stackoverflow.com,我希望得到com的结果。

我有这个函数,但是我必须输入http://才能得到结果。

有没有办法跳过进入http://https://

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-18 11:16:12

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2022-02-18 10:24:46

根据建议,Extracting top-level and second-level domain from a URL using regex应该在Delphi中这样运行:

代码语言:javascript
复制
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils, System.RegularExpressions;
var
  url,
  rePattern: string;
  rMatch   : TMatch;
  rGroup   : TGroup;
  arr      : TArray<string>;
begin
  try
    url := 'https://www.answers.com/article/1194427/8-habits-of-extraordinarily likeable-people';
    //url := 'https://stackoverflow.com/questions/71166883/how-to-extract-domain-suffix';
    rePattern := '^(?:https?:\/\/)(?:w{3}\.)?.*?([^.\r\n\/]+\.)([^.\r\n\/]+\.[^.\r\n\/]{2,6}(?:\.[^.\r\n\/]{2,6})?).*$';
    rMatch := TRegEx.Match(url, rePattern);
    if rMatch.Success then
    begin
      rGroup := rMatch.Groups.Item[pred(rMatch.Groups.Count)];
      arr := rGroup.Value.Split(['.']);
      writeln('Top-Level-Domain: ', arr[High(arr)]);
    end
    else
     writeln('Sorry');
    readln;
  except
   on E: Exception do
     Writeln(E.ClassName, ': ', E.Message);
  end;
end.

但是,此正则表达式仅在提供www.时才能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71166883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档