如何使用Perl删除部分URL?

时间:2009-06-14 21:39:18

标签: perl url

如何使用Perl从字符串中删除子字符串?例如,$URL包含http://xyz.com/Main#abcd.aspx

我想检查并从Main#中删除“$URL”任何人都可以帮助我吗?

首先,我需要检查字符串Main#是否存在。 如果存在,则将其剥离;否则就不需要做任何事了。所以只有if语句。

4 个答案:

答案 0 :(得分:6)

use strict;
use warnings;
use URI::Split qw( uri_split uri_join ); 

my $str = "http://xyz.com/Main#abc.aspx"
my ($scheme, $auth, $path, $query, $frag)  = uri_split( $str );

这会将URI作为一系列令牌提供给你,但除此之外,你想要做的事情的具体细节还有点不清楚。

  1. 您是否尝试提取路径以便使用它?
  2. 您是否尝试重新构建没有路径的URI?
  3. 您是否尝试仅提取路径中的特定节点?
  4. 您是否尝试在路径中没有特定节点的情况下重构URI
  5. 您是仅尝试过滤掉文字字符串'Main',而不是其他任何内容?
  6.   

    首先,我需要检查一下   字符串#Main是否存在,   如果它存在则将其剥离   没什么可做的,所以只有一个   声明

    if( $str  =~ /#Main/ ){
       $str =~ s/#Main//g;
    }
    

    这将从url中的任何位置删除文字字符串'#Main'(如果存在)。这也可以写成

    $str =~ s/#Main//g;
    

    因为如果它不存在,则不会进行任何替换。

    显着并发症

    如果您尝试从Web客户端检索URI,例如,它是一个请求字符串,您可能会发现#.*部分(也称为文档片段)已从你得到它时的URI。根据我的经验,这是Web客户端的行为方式。

    我很确定某个地方有一个RFC指定这样做,但是懒惰 -

答案 1 :(得分:2)

$URL =~ s/Main#//;

如果“Main#”不存在,那么这是一个无操作。

答案 2 :(得分:1)

'perldoc perlop' - 查看s ///部分
'perldoc perlre'' - 阅读整篇文件
http://oreilly.com/catalog/9780596001322/

答案 3 :(得分:-1)

$URL =~ s/Main#//;

将删除Main#的第一个实例。在最后一个之后添加g将使其去除所有实例。剥离最后一个实例不是那么简单;这里有几种方法:

$URL = reverse($URL);
$URL =~ s/#niaM//;
$URL = reverse($URL);

$URL =~ s/^(.*)Main#/$1/;

my $index = rindex( $URL, 'Main#' );
if ($index >= 0) { substr( $URL, $index, 5, '' ) }

如果你想做更复杂的事情(比如在主机名以外的地方除去“com”),你可能想要用URIURI::Split模块解析URI。