代码之家  ›  专栏  ›  技术社区  ›  Amit

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

  •  1
  • Amit  · 技术社区  · 14 年前

    我希望regex查找以下类型的字符串:

    哪里

    abc ->ABC始终保持ABC

    任何东西 ->可以是任何字符串

    热释光晶体管 ->它可以是任何TLD(顶级域),比如 .com .net .co.in .co.uk 等。

    注: URL结尾不能包含任何其他内容,表示 http://anything.abc.tld/xyz 不可接受。

    注: 由于TLD的列表很长,而且仍然有可能忘记包含一些TLD,所以我不想在regex中编写每个TLD来检查。相反,我希望有一个regex来检查以下内容(对于tld):

    • ABC之后有一个句号(.)

    • 句点(.)之后至少有一个字符

    4 回复  |  直到 13 年前
        1
  •  3
  •   Jens    14 年前

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

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

    但这必须定期维持。 只是使用 [^/]* 因为TLD可能更容易。这个看起来像

    ^http://[\w.-]+\.abc\.[^/]+/?$
    
        2
  •  1
  •   gpvos    14 年前
    ^http://[a-zA-Z0-9.-]+\.abc\.[a-zA-Z.]+/?$
    

    根据您使用的regex方言,可能会有一些不同。

        3
  •  1
  •   Brian    14 年前

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

    也为您分组:)

    我强烈建议使用gskinner.com提供的regex工具

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

        4
  •  0
  •   Joel J. Adamson    14 年前

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

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

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

    你已经试过什么了?你是怎么测试的?