is Capture is Cool does NQPMatchRole
Match
对象是成功正则匹配的结果,包括任何零宽匹配。它们存储对原始字符串 (.orig
)、位置和命名捕获、匹配在原始字符串中开始和结束的位置以及称为 AST(抽象语法树)的有效负载的引用,该有效负载可用于从复杂的正则表达式和语法中构建数据结构。
最后一次匹配还存储在 $¢
Match
对象中,该对象在词法上限定为正则表达式,即仅在正则表达式中可用,如下所示
my ;'abc' ~~ /.$$/;say ; # OUTPUT: «「c」»
在此示例中,我们在匹配发生时在大括号中运行代码,在本例中是字符串中的最后一个字母(实际上是最后一个,由双 $
表示,字符);$c
获取包含 Match
的光标 $¢
的值;与 say
一起使用时,Match
通过对其调用 .Str
来字符串化。此 $¢
提供了一种在正则表达式中捕获匹配的方法;在外部,您需要使用 $/
my ; 'camelia' ~~ / /;say ; # OUTPUT: «「m」»say $/; # OUTPUT: «「m」»
注意:此功能仅适用于 Raku 2018.02 版。它将在任何先前版本中返回 Nil
。或者,在该版本之前,您可以使用 $/
,在正则表达式中,它具有相同的值
'123' ~~ / (\d) \d+ /; # OUTPUT: «「1」「1」 0 => 「1」»
$/
和 $¢
之间的主要区别在于作用域:后者仅在正则表达式中具有值
'123' ~~ / (\d) \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 = 'abcdef';~~ /b. ../; # OUTPUT: «3»
您不应该对已完成的 Match
使用此方法,因为输出可以是特定于实现的,或者在任何情况下都是未指定的。
方法 target§
method target()
返回与正则表达式匹配的对象的字符串表示形式。这是正则表达式引擎在内部使用值。
my = "þor" ~~ /o/;say .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: Mu )sub make(Mu )
设置 .ast
属性,该属性将使用 .made
检索。
$/.make("your payload here");
也就是说,它将一个任意有效负载存储到 Match
对象中,该有效负载稍后可以通过 .made
方法检索。由于子表单在默认情况下对 $/
进行操作,因此该示例等效于
make("your payload here");
这通常用于 语法 的动作类方法,其中数据的一部分由一种方法存储,然后由另一种方法检索。由您决定存储什么数据。它可以是树节点、计算结果、类型对象或值列表。
子表单对当前匹配 $/
进行操作,这可以是一个方便的快捷方式
method my-action ($/)
方法 actions§
method actions(Match: --> Mu)
返回动作对象(如果已设置;否则为 Mu
),该语法用于从中创建此 Match 对象。
方法 ast§
方法 made 的别名。
方法 Bool§
method Bool(Capture: --> Bool)
匹配成功时返回 True
,匹配不成功时返回 False
。请注意,任何零宽匹配也可能是成功的。
say 'abc' ~~ /^/; # OUTPUT: «「」»say $/.from, ' ', $/.to, ' ', ?$/; # OUTPUT: «0 0 True»
方法 Str§
method Str(Match: --> Str)
返回匹配的文本。
"abc123def" ~~ /\d+/;say $/.Str; # OUTPUT: «123»
方法 Int§
method Int(Match: --> Int)
尝试将匹配文本的字符串化结果转换为 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 contextsay ('one-two' ~~ /234/).Int; # OUTPUT: «0» # because Nil.Int returns 0
方法 caps§
返回一个配对列表,其中索引或子匹配名称作为键,子匹配作为值。该列表按子匹配的起始位置排序。
方法 chunks§
返回一个配对列表,其中索引或子匹配名称作为键,子匹配作为值。该列表按子匹配的起始位置排序。
字符串中未被子匹配匹配的部分与其他配对交错,其中字符串 ~
作为键。
方法 list§
返回位置子匹配的列表。
方法 hash§
返回命名子匹配的哈希。
方法 prematch§
method prematch(Match: --> Str)
返回匹配之前的原始字符串部分。
'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: --> Str)
返回匹配之后的原始字符串部分。
'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: Str() --> Str)
返回调用字符串,其中 Match
对象被 $replacement
替换。
my Str = "Some foo";my Match = .match(/foo/);my = .replace-with("string"); # «Some string»
中缀 eqv§
multi infix:<eqv>(Match \a, Match \b)
如果 a
和 b
的 pos
、from
和 orig
属性相等,并且 made
、Capture::list
和 Capture::hash
相同或均未定义,则返回 True
。