【问题标题】:perl remove substring before a characterperl在一个字符之前删除子字符串
【发布时间】:2014-07-17 19:23:02
【问题描述】:

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

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

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

我该怎么做?

【问题讨论】:

  • 请注意,正则表达式会修改$string,这可能不是您想要的。

标签: string perl substring


【解决方案1】:

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

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 和 A_O_Scott。我怎样才能让它只有 A_O_Scott 打印?
  • $params{critic_name}
【解决方案2】:
if ($string =~ /^(.*)\?(.*)$/) {
    my $first_bit = $1;
    my $second_bit = $2;
}

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

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多