我有以下字符串:
get_url.pl?critic_name=A_O_Scott
。
我有以下正则表达式,它会在=
之前返回任何内容,但我似乎无法在?
之前将其删除
$string=~ s/\=.*$//;
我该怎么做?
答案 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
。