如何使用Perl从字符串中删除子字符串?例如,$URL
包含http://xyz.com/Main#abcd.aspx
我想检查并从Main#
中删除“$URL
”任何人都可以帮助我吗?
首先,我需要检查字符串Main#
是否存在。
如果存在,则将其剥离;否则就不需要做任何事了。所以只有if语句。
答案 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作为一系列令牌提供给你,但除此之外,你想要做的事情的具体细节还有点不清楚。
首先,我需要检查一下 字符串#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”),你可能想要用URI或URI::Split模块解析URI。