正则表达式匹配特定域的子域,没有路径

时间:2010-04-20 10:10:09

标签: regex

我想要一个正则表达式来查找以下类型的字符串:

,其中

abc - > abc始终保持abc

任何事情 - >它可以是任何字符串

tld - >它可以是任何tld(顶级域名),例如.com .net .co.in .co.uk等。

  

注意:该网址最后不得包含任何其他内容,因此无法接受http://anything.abc.tld/xyz

     

注意:由于tld列表是一个很长的列表,但仍然有可能忘记包含一些tld,我不想在正则表达式中编写每个tld来检查。相反,我希望有一个正则表达式来检查以下(对于tld):

     
      
  • 在abc之后,有一段时间(。)

  •   
  • 在句号(。)之后,至少有一个字符

  •   

4 个答案:

答案 0 :(得分:3)

有很多TLD,而且它们的数量正在增长。你可以用

^http://[\w.-]+\.abc\.(com|net|co\.in|....  )/?$

但这必须定期维持。 仅使用[^/]*作为TLD可能会更容易。这看起来像

^http://[\w.-]+\.abc\.[^/]+/?$

答案 1 :(得分:1)

^http://[a-zA-Z0-9.-]+\.abc\.[a-zA-Z.]+/?$

根据您使用的正则方言,可能会略有不同。

答案 2 :(得分:1)

^(http://)(.+)(abc)+.([ ^ /] +)$

所有人也为您分组:)

我强烈建议您使用gskinner.com的RegEx工具

alt text http://img683.imageshack.us/img683/3760/regexmatch.jpg

答案 3 :(得分:0)

首先确定您将要处理的数据类型:这些基于行的记录,还是XML(例如,它们可能是其他任何东西)?这将告诉你如何锚定比赛。如果你可以使用^锚定它们,那么这会更容易。在“http://”和顶级域名之间是否需要可变数量的字符串?如果您不想写出顶级域名,请使用

\.[a-z]\{2,3\}

确切的形式取决于您使用的是基本正则表达式(sed,grep)还是扩展正则表达式(awk),或Perl兼容的正则表达式。

你有什么尝试?你是如何测试它的?