IT TIP

Perl에서 $ 1은 무엇을 의미합니까?

itqueen 2020. 11. 23. 20:43
반응형

Perl에서 $ 1은 무엇을 의미합니까?


Perl에서 $ 1은 무엇을 의미합니까? 또한 $ 2는 무엇을 의미합니까? $ number 변수가 몇 개 있습니까?


$number변수는 일치하는 문자열의 일부가 포함 캡처 그룹 ( ... ) 일치가 성공하면 마지막 정규식 일치에 대한 패턴을.

예를 들어, 다음 문자열을 사용하십시오.

$text = "the quick brown fox jumps over the lazy dog.";

진술 후

$text =~ m/ (b.+?) /;

$1" brown" 텍스트와 같습니다 .


숫자 변수는 마지막 으로 성공한 일치 또는 적용한 대체 연산자의 일치입니다.

my $string = 'abcdefghi';

if( $string =~ /(abc)def(ghi)/ ) {
    print "I found $1 and $2\n";
    }

$ 1 등을 사용하기 전에 항상 일치 또는 대체가 성공했는지 테스트하십시오. 그렇지 않으면 다른 작업에서 남은 음식을 가져올 수 있습니다.

Perl 정규식은 perlre에 문서화되어 있습니다.


$ 1, $ 2 등은 마지막 으로 성공한 일치 의 캡처 값을 포함 합니다. 즉, 액세스하기 전에 일치가 성공했는지 확인하는 것이 중요합니다.

 if ( $var =~ m/( )/ ) { # use $1 etc... }

문제의 예-$ 1에는 아래의 두 인쇄 문에 'Quick'이 포함되어 있습니다.

#!/usr/bin/perl

'Quick brown fox' =~ m{ ( quick ) }ix;
print "Found: $1\n";

'Lazy dog' =~ m{ ( quick ) }ix;
print "Found: $1\n";

다른 사람들이 지적했듯이 $ x는 일치하는 패턴의 섹션을 참조 할 수있는 정규식에 대한 캡처 변수입니다.

Perl은 또한 어떤 경우에는 인간이 기억하기 쉬운 명명 된 캡처를 지원합니다.

주어진 입력 : 111222

/(\d+)\s+(\d+)/

$ 1은 111입니다.

$ 2는 222입니다.

다음과 같이 말할 수도 있습니다.

/(?<myvara>\d+)\s+(?<myvarb>\d+)/

$ + {myvara}는 111입니다.

$ + {myvarb}는 222입니다.


이를 "일치 변수"라고합니다. 앞서 언급했듯이 여기에는 마지막 정규식 일치의 텍스트가 포함됩니다.

더 많은 정보는 여기 : http://cslibrary.stanford.edu/108/EssentialPerl.html

(해당 섹션을 찾으려면 '변수 일치'에 대한 CTRL-F)


캡처 그룹에 질문 했으므로 $ +에 대해서도 알고 싶을 것입니다 .. 꽤 유용합니다 ..

use Data::Dumper;
$text="hiabc ihabc ads byexx eybxx";
while($text=~/(hi|ih)abc|(bye|eyb)xx/igs)
{
    print Dumper $+;
}

출력 :
$ VAR1 = 'hi';
$ VAR1 = 'ih';
$ VAR1 = '안녕';
$ VAR1 = 'eyb';


Perl의 "마법"변수에 관한 일반적인 질문은 Perl 사전 정의 된 변수 문서를 살펴보면 다음과 같이 대답 할 수 있습니다.

perldoc perlvar

그러나이 문서에서 $ 1 등을 검색하면 이러한 "숫자"변수에 대한 섹션을 제외하고 여러 위치에서 참조를 찾을 수 있습니다. 당신은 검색해야

$<digits>

나는 이것을 주석이나 편집 으로 Brian의 대답에 추가했을 것이지만 충분한 담당자가 없습니다. 누군가 이것을 추가하면이 대답을 제거하겠습니다.


The variables $1 .. $9 are also read only variables so you can't implicitly assign a value to them:

$1 = 'foo'; print $1;

That will return an error: Modification of a read-only value attempted at script line 1.

You also can't use numbers for the beginning of variable names:

$1foo = 'foo'; print $1foo;

The above will also return an error.


I would suspect that there can be as many as 2**32 -1 numbered match variables, on a 32bit compiled Perl binary.

참고URL : https://stackoverflow.com/questions/1036285/what-does-1-mean-in-perl

반응형