【问题标题】:Regex help - stripping out the domain name正则表达式帮助 - 去除域名
【发布时间】:2012-03-08 18:08:21
【问题描述】:

说我的网址是

  • https://foo.bar.com/somedirectory/somefile.php

  • http://abc.bar.co.uk/somedirectory/somefile.php

得到的正则表达式是什么

  • /somedirectory/somefile.php

  • somedirectory/somefile.php?

【问题讨论】:

  • 您使用哪种语言?该语言很可能提供了解析 URI 的功能。
  • 在 SO 中搜索“regex url”。可能有十几个这样的问题具有公认的答案。附带说明...您可能应该使用您选择的语言提供的某种方法来解析 url。

标签: regex


【解决方案1】:

假设您的 URL 始终以 http://https:// 开头,这应该可以工作(并且由于您没有指定语言,这里是 Perl 中的实现):

use strict;
use warnings;

my @urls=("https://foo.bar.com/somedirectory/somefile.php", "http://abc.bar.co.uk/somedirectory/somefile.php");

foreach my $url(@urls)
{
  if($url=~/^http(?:s)?:\/\/[^\/]+(\/.*)$/)
  {
    print "$1\n";
  }
  else
  {
    print "$url did not match!\n";
  }
}

输出是:

/somedirectory/somefile.php
/somedirectory/somefile.php

【讨论】:

    【解决方案2】:

    代码

    使用javascript(可以测试here):

    要返回“/somedirectory/somefile.php”:

    var inputString = "https://foo.bar.com/somedirectory/somefile.php";
    var regex = /https?:[\/]{2}\S*?(\/\S*)/;
    var outputString = inputString.replace(regex,"$1");
    alert(outputString);​
    

    要返回“somedirectory/somefile.php”,请像这样更改正则表达式:

    var regex = /https?:[\/]{2}\S*?\/(\S*)/;
    

    正则表达式

    核心正则表达式如下。这可能需要根据您使用的语言进行一些调整:

    https?:[\/]{2}\S*?(\/\S*)   
    

    要将其扩展到 ftp 站点,您可以使用

    (ht|f)tps?:[\/]{2}\S*?(\/\S*)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2011-06-10
      相关资源
      最近更新 更多