제목에서 알 수 있듯이, 차이 무엇 $/
과 $¢
? 그들은 항상 같은 값을 가지고있는 것 같습니다 :
my $text = "Hello world";
$text ~~ /(\w+) { say $/.raku } (\w+)/;
$text ~~ /(\w+) { say $¢.raku } (\w+)/;
둘 다 동일한 값을 가진 일치 오브젝트를 생성합니다. 하나를 다른 것보다 사용하는 논리는 무엇입니까?
제목에서 알 수 있듯이, 차이 무엇 $/
과 $¢
? 그들은 항상 같은 값을 가지고있는 것 같습니다 :
my $text = "Hello world";
$text ~~ /(\w+) { say $/.raku } (\w+)/;
$text ~~ /(\w+) { say $¢.raku } (\w+)/;
둘 다 동일한 값을 가진 일치 오브젝트를 생성합니다. 하나를 다른 것보다 사용하는 논리는 무엇입니까?
답변:
변수 $/
는 가장 최근의 일치를 나타내며 변수 는 가장 최근의 일치를 $¢
나타냅니다. 위와 같은 대부분의 기본 정규 표현식에서는 하나와 같을 수 있습니다. 그러나 .raku
메소드 의 출력에서 볼 수 있듯이 Match
객체는 다른 Match
객체를 포함 할 수 있습니다 (사용 $<foo>
하거나 $1
캡처 할 때 얻는 것 ).
대신 우리는 정량화 된 캡처와 함께 다음 정규 표현식을 가지고 있다고 가정
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
그리고 우리가 "abcdcdcd"와 일치하면 다음과 같은 결과를 볼 수 있습니다.
0 2
0 4
0 6
그러나를 사용에서 $¢
로 변경 $/
하면 다른 결과가 나타납니다.
2 2
4 4
6 6
( .to
비트 오프로 보이는 이유 .pos
는 캡처 블록이 끝날 때까지 업데이트되지 않기 때문입니다.)
즉, $¢
의지 항상 당신의 결승전 객체 (즉, 될 것입니다 무엇을 참조 $final = $text ~~ $regex
그냥 수, 당신은 정확하게 정규식의 복잡한 캡처 트리 내부를 통과 할 수 있도록 한 후 위의 예에서 전체 경기 그래서 완료 한 것처럼) 할 $¢[0]
첫 경기를 참조하는 $¢[1]
두 번째 등
정규식 코드 블록 내부 $/
에서 가장 직접적인 일치를 나타냅니다. 위의 경우 내부 ( )
와 일치하며 다른 일치 또는 원래 일치 시작에 대해 알지 못합니다.( )
. 블록 . 더 복잡한 정규 표현식을 제공하십시오.
/ a $<foo>=(b $<bar>=(c)+ )+ d /
foo
을 말하면 $ ¢ 모든 토큰을 사용하여 언제든지 액세스 할 수 있습니다 $¢<foo>
. 를 사용하여 bar
주어진 토큰에 액세스 할 수 있습니다 . 우리의 코드 블록 내부에 삽입하는 경우 의 캡처, 그것은 액세스 할 수있을 것입니다 사용하여 토큰 이나 ,하지만 액세스 다른 수 없습니다 들.foo
$¢<foo>[0]<bar>
foo
bar
$<bar>
$/<bar>
foo
$¢
당신이 말을해야 할 것, 그래서 각 토큰에 대한 갱신 $*TOP := $¢
에 TOP
토큰하지만이에 대한 필요성을 제거하지 않습니다 $*TOP
물론 VAR. 나는 최고 수준에서 경기를 참조 할 수 있다는 것이 대단한 것에 동의합니다. 문제는 궁극적으로 여전히 식별하는 것입니다. 위치 / 해시 일치가 일치 개체에 게시 될 때입니다. $¢
토큰 당 —을 사용할 때 결과는 둘러싸는 { }
블록이 발생 하자마자 정의에 따라 게시됩니다 .
Binex
에서 일치하는 결과를 즉시 발견하는 것이 계산 상 더 나쁘지 않다는 것입니다. 하루가 끝나면 캐시 된 목록 / 해시로 푸시 / 팝핑하거나 경기의 목록 / 해시로 푸시 / 팝핑합니다. 그러나 LTM에 대해 잘 모르는 내부 속도 향상이있을 수 있습니다 ( { }
LTM의 목적으로 토큰을 종료하므로 실행 / 테스트 될 가능성이 높습니다 |
그룹화 의 나머지 토큰 )
$¢
역동적 이라는 결론 에 뛰어 들었고 그것이 작동하지 않을 때 놀랐습니다. 그러나 페니는 이제 "가장 바깥 쪽"이라는 단어를 사용했을 때 짐작할 수 있듯이 어휘 적이라는 말을 들었습니다.
$¢
과 $/
가 진행됨에 따라 규칙 일치 및 캡처 어떤이를 기록합니다 같은 객체, 즉이 새로운 일치 객체에 바인딩됩니다. 그런 다음 일치가 진행됨에 $¢
따라이 전체 일치 개체에 바인딩 된 상태로 유지되지만 $/
새 일치 개체가 생성 될 때마다 리바운드되므로 항상 최신 일치 개체에 해당합니다. 권리?
$/
과$¢
범위는 다음 과 같이 해석했다 . 후자는 정규 표현식 내부의 값만 가지고있다"는 의미$¢
는 단지 흔적 흔적 일 뿐이다Cursor
. 당신의 대답을 읽을 때 나는 가능한 개선점 에서 내가 만든$¢
것이라고 생각했습니다 . SO에 대한 나의 대답 섹션 "반복 된 임의의 캐릭터를 캡처 그룹과 일치시키는 데 왜 추가 변수가 필요한가?" 그러나 교체하려는 시도 는 실패했습니다. 그 대답에서 내 요점을 이해합니까? 작동시킬 수 있습니까?$*TOP
$*TOP
$¢