perl在字符前删除子字符串

时间:2014-05-28 14:02:55

标签: string perl substring

我有以下字符串: get_url.pl?critic_name=A_O_Scott

我有以下正则表达式,它会在=之前返回任何内容,但我似乎无法在?之前将其删除

$string=~ s/\=.*$//;

我该怎么做?

2 个答案:

答案 0 :(得分:5)

使用现有的解析器而不是编写自己的解析器。

use URI             qw( );
use URI::QueryParam qw( );

my $uri = URI->new('get_url.pl?critic_name=A_O_Scott', 'http');

然后,如果你想要第一个参数的名称,

my ($first_param_name) = $uri->query_param();

那就是说,大部分时间,你都需要参数的哈希值。

my %params = $uri->query_form();

你说你想删除 get_url.pl,但其他答案假设你想要保留的部分。如果您想在查询之前使用该部件,则可以使用

use URI qw( );

my $uri = URI->new('get_url.pl?critic_name=A_O_Scott', 'http');
$uri->query(undef);

print("$uri\n");

答案 1 :(得分:0)

if ($string =~ /^(.*)\?(.*)$/) {
    my $first_bit = $1;
    my $second_bit = $2;
}

对于示例字符串a?b,这会将$first_bit设置为字符串a,将$second_bit设置为字符串b