2014-04-21 4 views
0

에서 텍스트 찾기 :나는 아래와 같은 문자열이 문자열

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

내가하지와 값에 얻을 싶어 ..이 어떻게 작동 할 수 있습니다?

+0

이 무슨이 연구했거나 시도 했습니까? – HamZa

+0

나는 '?'를 사용하여 변수를 분할하려고 시도했다. 먼저 var2 = "not = 1234 & at = 6789 & xyz & LMN"변수를 제공합니다. – user2013387

+0

그런 다음 &를 사용하여 분할합니다. 그것은 내 코드 라인을 증가시킨다. 다른 방법이 있는가 ?? – user2013387

답변

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 
+0

와우 훨씬 쉬워 .. 고맙습니다. :) – user2013387

+0

당신이 찾고자하는 키 앞에'\ b'를 넣는 것이 좋습니다. 그래서 당신이 찾고있을 때'cat = 4 &'와 우연히 일치하지 않도록하십시오. '에'. 그래서'$ var = ~/\ bat = (. *?) & /;'라고 말하고 싶습니다. –

+0

@ MarkNodine Thanks. 좋은 지적! –

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'; 
+2

예 올바른 접근 방식입니다. –

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 
+0

해시 기능에 그룹을 알지 못했습니다. 흥미로운 라인. –

관련 문제