정규 표현식 외부 정규화 표현식 <>은 작은 따옴표처럼 작동합니다. 배열 변수가 정규식 내에서 허용된다펄의 정규 표현식에서 <> 및 익명 배열의 특수한 의미 6
# Outside regex, <> acts like single quotes:
> my $x = <{"one"}>
{"one"}
> $x.WHAT
(Str)
# Inside regex, <> evaluates and interpolates:
> my $b="one";
one
> say "zonez" ~~ m/ <{$b}>/# Evaluates {$b} then quotes: m/ one/
「one」
> say "zonez" ~~ m/ <$b>/ # Interpolates and quotes without {}
「one」
때문에, 나는 펄 6 정규식 엔진이 배열을 소비하는 것으로 생각 : 내 얕은 이해는 정규 표현식 내부 <이> 코드의 평가 및 보간을 허용 말해 보인다 배열을 둘러싼 정규식 내부에 <이있을 때 OR로 변환합니다.
또한 사용자 정의 문자 클래스 < []>에서 < 배열의 배열은 익명의 배열과 비슷한 방식으로 작동하며 아래의 @a와 유사합니다. 배열 (문자 클래스의 문자)은 OR에 소비됩니다.
my @a = $b, "two";
[one two]
> so "zonez" ~~ m/ @a /;
True
> say "ztwoz" ~~ m/ <{[$b, "two"]}>/# {} to eval array, then <> quotes
「two」
> say "ztwoz" ~~ m/ <{@a}>/
「two」
> say "ztwoz" ~~ m/ <@a>/
「two」
> say "ztwoz" ~~ m/ one || two/# expands @a into ORs: [||] @a;
# [||] is a reduction operator;
「two」
그리고 문자 클래스 확장 :
> say "ztwoz" ~~ m/ <[onetw]>/# like [||] [<o n e t w>];
「t」
> say "ztwoz" ~~ m/ o|n|e|t|w/
「t」
> my @m = < o n e t w >
[o n e t w]
> say "ztwoz" ~~ m/ @m/
「t」
나는 Rakudo 소스 코드에보고하지 않은, 나의 이해는 제한됩니다. 나는 <> 실제로 정규 표현식 내부에 배열을 구성한다는 것을 증명하기 위해 정규 표현식 내부에 익명 배열을 만들지 못했습니다.
그렇다면 <> 정규식 내부에 특별한 것이 있습니까? 아니면 내가 Rakudo 소스 코드를 연구해야합니까? (나는 현재이 때하지 않으려 고합니다)?
대단히 Brad Gilbert 님, 감사합니다. <{}> 정말 멋지다 !!> say "zzonezz"~~ m/<("foo"라고 말하십시오. "하나";}>/ foo는 foo는 단지 – lisprogtor
perl6 foo는 '<>'당신이 <''뒤에 공백을 넣을 때, 정규 표현식에 내부 qw''와 같은 역할을 할 수 있습니다. 예 :'/ < a b c> /' – lisprogtor
:-) 더 나은 일상을 얻는다 「하나」 – CIAvash