【发布时间】:2014-07-17 19:23:02
【问题描述】:
我有以下字符串:
get_url.pl?critic_name=A_O_Scott.
我有以下正则表达式,它在 = 之前返回任何内容,但我似乎无法在 ? 之前删除它
$string=~ s/\=.*$//;
我该怎么做?
【问题讨论】:
-
请注意,正则表达式会修改
$string,这可能不是您想要的。
我有以下字符串:
get_url.pl?critic_name=A_O_Scott.
我有以下正则表达式,它在 = 之前返回任何内容,但我似乎无法在 ? 之前删除它
$string=~ s/\=.*$//;
我该怎么做?
【问题讨论】:
$string,这可能不是您想要的。
使用现有的解析器而不是自己编写。
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");
【讨论】:
$params{critic_name}
if ($string =~ /^(.*)\?(.*)$/) {
my $first_bit = $1;
my $second_bit = $2;
}
对于示例字符串a?b,这会将$first_bit 设置为字符串a,并将$second_bit 设置为字符串b。
【讨论】: