class Match is Capture is Cool does NQPMatchRole {}

Match 对象是成功正则匹配的结果,包括任何零宽匹配。它们存储对原始字符串 (.orig)、位置和命名捕获、匹配在原始字符串中开始和结束的位置以及称为 AST(抽象语法树)的有效负载的引用,该有效负载可用于从复杂的正则表达式和语法中构建数据结构。

最后一次匹配还存储在 Match 对象中,该对象在词法上限定为正则表达式,即仅在正则表达式中可用,如下所示

my $c;
'abc' ~~ /.$${ $c = $¢ }/;
say $c# OUTPUT: «「c」␤»

在此示例中,我们在匹配发生时在大括号中运行代码,在本例中是字符串中的最后一个字母(实际上是最后一个,由双 $ 表示,字符);$c 获取包含 Match 的光标 的值;与 say 一起使用时,Match 通过对其调用 .Str 来字符串化。此 提供了一种在正则表达式中捕获匹配的方法;在外部,您需要使用 $/

my $c'camelia' ~~ /<[ l m ]> {$c = $¢}/;
say $c# OUTPUT: «「m」␤» 
say $/# OUTPUT: «「m」␤»

注意:此功能仅适用于 Raku 2018.02 版。它将在任何先前版本中返回 Nil。或者,在该版本之前,您可以使用 $/,在正则表达式中,它具有相同的值

'123' ~~ / (\d{ say $0say $/} \d+ /# OUTPUT: «「1」␤「1」␤ 0 => 「1」␤»

$/ 之间的主要区别在于作用域:后者仅在正则表达式中具有值

'123' ~~ / (\d{ say $/say $¢; } \d+ /# OUTPUT: «「1」␤ 0 => 「1」␤「1」␤ 0 => 「1」␤» 
say "¢ → ", $¢, "/ is $/"; ; # OUTPUT: «¢ → Nil/ is 123␤» 

子匹配也是 Match 对象(或 Match 对象的列表,如果相应的正则表达式被量化),因此每个匹配对象都可以看作是匹配对象树的根。

Match 对象还可以保存正在进行的匹配的结果(在语法引擎运行时),在这种情况下,pos 方法返回当前位置。仅当您从正则表达式中调用代码时,才能看到 Match 对象的此视图。

注意(已弃用):此类有一个同义词,Cursor,定义为

my constant Cursor = Match

最初,它用于跟踪正则表达式匹配中的初始位置。在当前版本中,它是 Match 的别名。

方法§

方法 pos§

对于正在进行的正则表达式匹配,返回当前位置作为 Match.target 中的字符串索引

my $a = 'abcdef';
$a ~~ /b. {say $/.pos }../;     # OUTPUT: «3␤»

您不应该对已完成的 Match 使用此方法,因为输出可以是特定于实现的,或者在任何情况下都是未指定的。

方法 target§

method target()

返回与正则表达式匹配的对象的字符串表示形式。这是正则表达式引擎在内部使用值。

my $a = "þor" ~~ /o/;
say $a.target # OUTPUT: «þor␤»

方法 chars§

method chars()

返回匹配字符串中的字符数,如果没有匹配,则返回 0。

返回与 .Str.chars 相同的内容。

方法 clone§

method clone()

克隆 Match 对象。

方法 orig§

method orig()

返回正则表达式引擎的原始输入,通常是字符串,但不必是(可以是任何可以强制转换为字符串的内容)

42 ~~ /.+/;
say $/.orig;            # OUTPUT: «42␤» 
say $/.orig.^name;      # OUTPUT: «Int␤»

有关始终返回字符串的近似等效项,请参见 方法 target

方法 from§

method from()

返回匹配开始位置的索引。

方法 to§

method to()

返回匹配结束位置旁边的索引。如果匹配结束为负,它将返回匹配位置,如果没有匹配,则返回 Nil

方法 made§

method made()

返回使用 make 设置的有效负载。

例程 make§

method make(Match:D: Mu $payload)
sub make(Mu $payload)

设置 .ast 属性,该属性将使用 .made 检索。

$/.make("your payload here");

也就是说,它将一个任意有效负载存储到 Match 对象中,该有效负载稍后可以通过 .made 方法检索。由于子表单在默认情况下对 $/ 进行操作,因此该示例等效于

make("your payload here");

这通常用于 语法 的动作类方法,其中数据的一部分由一种方法存储,然后由另一种方法检索。由您决定存储什么数据。它可以是树节点、计算结果、类型对象或值列表。

子表单对当前匹配 $/ 进行操作,这可以是一个方便的快捷方式

method my-action ($/{
    make "foo: $/";
}

方法 actions§

method actions(Match:D: --> Mu)

返回动作对象(如果已设置;否则为 Mu),该语法用于从中创建此 Match 对象。

方法 ast§

方法 made 的别名。

方法 Bool§

method Bool(Capture:D: --> Bool:D)

匹配成功时返回 True,匹配不成功时返回 False。请注意,任何零宽匹配也可能是成功的。

say 'abc' ~~ /^/;                   # OUTPUT: «「」␤» 
say $/.from' ',  $/.to' '?$/# OUTPUT: «0 0 True␤»

方法 Str§

method Str(Match:D: --> Str:D)

返回匹配的文本。

"abc123def" ~~ /\d+/;
say $/.Str;               # OUTPUT: «123␤»

方法 Int§

method Int(Match:D: --> Int:D)

尝试将匹配文本的字符串化结果转换为 Int。

say ('12345' ~~ /234/).Int;       # OUTPUT: «234␤» 
say ('12345' ~~ /234/).Int.^name# OUTPUT: «Int␤» 
# the next line produces a warning about using Nil (result of a no match) in numeric context 
say ('one-two' ~~ /234/).Int;     # OUTPUT: «0␤» # because Nil.Int returns 0

方法 caps§

返回一个配对列表,其中索引或子匹配名称作为键,子匹配作为值。该列表按子匹配的起始位置排序。

方法 chunks§

返回一个配对列表,其中索引或子匹配名称作为键,子匹配作为值。该列表按子匹配的起始位置排序。

字符串中未被子匹配匹配的部分与其他配对交错,其中字符串 ~ 作为键。

方法 list§

返回位置子匹配的列表。

方法 hash§

返回命名子匹配的哈希。

方法 prematch§

method prematch(Match:D: --> Str:D)

返回匹配之前的原始字符串部分。

'abcdefg' ~~ /cd/;
say $/.prematch;          # OUTPUT: «ab␤» 
 
# will return a list of three match objects 
"abc123def" ~~ m:g/\d/;
say $/.[1].prematch;      # OUTPUT: «abc1␤»

方法 postmatch§

method postmatch(Match:D: --> Str:D)

返回匹配之后的原始字符串部分。

'abcdefg' ~~ /cd/;
say $/.postmatch;         # OUTPUT: «efg␤» 
 
# will return a list of three match objects 
"abc123def" ~~ m:g/\d/;
say $/.[1].postmatch;     # OUTPUT: «3def␤»

方法 replace-with§

multi method replace-with(Match:D: Str() $replacement --> Str:D)

返回调用字符串,其中 Match 对象被 $replacement 替换。

my Str $some-string = "Some foo";
my Match $match = $some-string.match(/foo/);
my $another-string = $match.replace-with("string"); # «Some string»

中缀 eqv§

multi infix:<eqv>(Match:D \aMatch:D \b)

如果 abposfromorig 属性相等,并且 madeCapture::listCapture::hash 相同或均未定义,则返回 True

类型图§

Match 的类型关系
raku-type-graph Match Match Capture Capture Match->Capture Cool Cool Match->Cool Mu Mu Any Any Any->Mu Capture->Any Cool->Any Grammar Grammar Grammar->Match

展开上面的图表