在字符串中查找文本

时间:2014-04-21 22:39:14

标签: regex perl

我有一个字符串如下:

$var = "ABC/type.xml/BYB?not=1234&at=6789&xyz&LMN";

我想得到not和at values ..如何使用它?

3 个答案:

答案 0 :(得分:5)

您可以并且可能应该使用可以正确解析此字符串的正确模块,例如URIURI::QueryParam

use strict;
use warnings;
use URI;
use URI::QueryParam;

my $str = "ABC/type.xml/BYB?not=1234&at=6789&xyz&LMN";
my $url = URI->new($str);
my $not = $url->query_param('not');
my $at  = $url->query_param('at');
print Dumper $not, $at;

<强>输出:

$VAR1 = '1234';
$VAR2 = '6789';

答案 1 :(得分:2)

最简单的事情可能是将所有值一次性拉入哈希值:

my $var = "ABC/type.xml/BYB?not=1234&at=6789&xyz&LMN";

my %values = $var =~ /(\w+)(?:=(.*?))?(?:&|\Z)/g;

在此之后,你有

  DB<5> x \%values
0  HASH(0x7fa133018f98)
   'LMN' => undef
   'at' => 6789
   'not' => 1234
   'xyz' => undef

答案 2 :(得分:0)

您可以尝试使用正则表达式来提取匹配项:

my $var = "ABC/type.xml/BYB?not=1234&at=6789&xyz&LMN";

$var=~/not=(.*?)&/;
my $a=$1;
$var=~/at=(.*?)&/;
my $b=$1;

say $a,",",$b;

输出:

1234,6789