正则表达式只采取域名

时间:2014-05-13 03:44:26

标签: c# regex

我有这个域列表

https://download.my-domain.com/auth/login
https://download.my-domain.com
http://localhost:60162/API/script/authbar.js
http://localhost:28173/logout.aspx
http://my-domain.com/logout.aspx
http://my-domain.com/logout.aspx/
http://my-domain.com/
http://my-domain.com
http://my-domain.tk/
http://my-domain.gov
download.my-domain.com/auth/login
www.download.my-domain.com/auth/login
http://www.google.com
https://www.google.com
http://www.google.com/
https://www.google.com/

我试过

((\.)?[a-zA-Z0-9-]+\.([a-zA-Z0-9]{2,4}))/?

但它也检测到 logout.aspx 任何帮助都会受到赞赏..

TYIA

预期结果:

  

my-domain.com

     

localhost(没有端口)

     

google.com

     

my-domain.tk

     

my-domain.gov

用法:

  

对于cookie域

5 个答案:

答案 0 :(得分:1)

以下内容可能适合您:

[-a-z0-9_]+(?!://)(?:\.[-a-z0-9_]+)?(?=[/:]|$)

Regular expression visualization

JS Demo

C# Demo

答案 1 :(得分:1)

也许这个更有可能在你的例子中起作用

([a-zA-Z0-9-]+(\.(com|net|org|info|coop|co\.uk|org\.uk|ac\.uk|uk|tk|gov)))|localhost

答案 2 :(得分:1)

我用Javascript中的最小正则表达式做到了这一点因为我很无聊。我想这很容易转换为c#?

var urls = [
  'https://download.my-domain.com/auth/login',
  'https://download.my-domain.com',
  'http://localhost:60162/API/script/authbar.js',
  'http://localhost:28173/logout.aspx',
  'http://my-domain.com/logout.aspx',
  'http://my-domain.com/logout.aspx/',
  'http://my-domain.com/',
  'http://my-domain.com',
  'http://my-domain.tk/',
  'http://my-domain.gov',
  'download.my-domain.com/auth/login',
  'www.download.my-domain.com/auth/login',
  'http://www.google.com',
  'https://www.google.com',
  'http://www.google.com/',
  'https://www.google.com/'
];

var domains = urls.map(function (url) {
  var domain = url.replace(/^https?:\/\//, '').split('/')[0];

  if (domain.indexOf(':') > 0) {
    domain = domain.split(':')[0];
  } else {
    domain = domain.split('.').slice(-2).join('.');
  }

  return domain;
});

答案 3 :(得分:0)

而不是

((\.)?[a-zA-Z0-9-]+\.([a-zA-Z0-9]{2,4}))/?

您应该添加所有可能的顶级域名

((\.)?[a-zA-Z0-9-]+\.(com|net|org|info|coop|co\.uk|org\.uk|ac\.uk|uk|tk)/?

答案 4 :(得分:0)

试试这个:

Regex("^(?>https?://|)([-A-Z0-9+&@#%?=~_|!,.;]+)", RegexOptions.IgnoreCase);

如果要忽略以logout.aspx结尾的行,请尝试以下操作:

Regex("^(?>https?://|)([-A-Z0-9+&@#%?=~_|!,.;]+)[-A-Z0-9+&@#%?=~_|!,:/.;]*(?<!logout.aspx/?)$", RegexOptions.IgnoreCase);