class Regex is Method { }

正则表达式是一种描述字符串集的模式。找出给定字符串是否在该集合中的过程称为匹配。这种匹配的结果是一个 Match 对象,如果字符串在集合中,则在布尔上下文中计算为 True

正则表达式通常由正则表达式字面量构造

rx/ ^ab /;      # describes all strings starting with 'ab' 
/ ^ ab /;       # same 
rx/ \d ** 2/;   # describes all strings containing at least two digits

可以使用 regex 声明符定义一个命名正则表达式,后跟大括号中的定义。由于任何正则表达式都 Callable 内省需要通过 &-sigil 引用。

my regex R { \N };
say &R.^name# OUTPUT: «Regex␤»

要将字符串与正则表达式进行匹配,可以使用智能匹配运算符

my $match = 'abc' ~~ rx/ ^ab /;
say $match.Bool;                # OUTPUT: «True␤» 
say $match.orig;                # OUTPUT: «abc␤» 
say $match.Str;                 # OUTPUT: «ab␤» 
say $match.from;                # OUTPUT: «0␤» 
say $match.to;                  # OUTPUT: «2␤»

或者可以在布尔上下文中计算正则表达式,在这种情况下它与 $_ 变量匹配

$_ = 'abc';
if / ^ab / {
    say '"abc" begins with "ab"';
}
else {
    say 'This is a weird alternative Universe';
}

方法§

方法 ACCEPTS§

multi method ACCEPTS(Regex:D: Mu --> Match:D)
multi method ACCEPTS(Regex:D: @)
multi method ACCEPTS(Regex:D: %)

将正则表达式与传入的参数进行匹配。如果参数是 Positional,它将返回任何列表项的第一个成功匹配。如果参数是 Associative,它将返回任何键的第一个成功匹配。否则,它将把参数解释为 Str 并与之匹配。

对于位置和关联匹配,Nil 在失败时返回。

方法 Bool§

multi method Bool(Regex:D: --> Bool:D)

与调用者的 $_ 变量匹配,并为匹配返回 True 或为不匹配返回 False

类型图§

Regex 的类型关系
raku-type-graph Regex Regex Method Method Regex->Method Mu Mu Any Any Any->Mu Callable Callable Code Code Code->Any Code->Callable Block Block Block->Code Routine Routine Routine->Block Method->Routine

展开上面的图表