Perl6从字符串获取正则表达式

时间:2018-11-24 14:44:34

标签: regex perl6

我想将正则表达式放入YAML配置文件(例如:config / filename.yaml)中。

-
  section: Begining
  regex: '/ ^ <[ a..b, A..B ]> /'
-
  section: Next
  regex: '/ ^ <[ c..z, C..Z ]> /'

例如,当我将其读入哈希(例如,使用YAMLish)时,

use YAMLish;
my @h = load-yaml('config/filename.yaml'.IO.slurp);

自然地,我在@h[0]<regex>中有一个字符串

那么如何从字符串中恢复正则表达式以用于匹配?

我想要类似以下内容,但以下内容无效:

say 'Its a beginning' if 'A beginning' ~~ @h[0]<regex>

由于@h[0]<regex>是Str,因此无法正常工作,因此智能匹配正在针对Str文字对@h[0]<regex>中的Str进行测试。那么如何使正则表达式脱离Str?

2 个答案:

答案 0 :(得分:11)

您可以通过$var将变量/ <$var> /中包含的字符串插入到正则表达式中,或者在更复杂的表达式中,例如/ <{ @h[0]<regex> }> /

但是,请注意,您首先必须从字符串中删除封闭的斜杠。对于可信赖的输入,当然总会有EVAL ...

答案 1 :(得分:1)

我认为编译外部正则表达式是一个好主意,因此您可以立即知道它们是否会失败(之后它们会更快):

Perl6 REPL:

> my $str = '\d+'; my $rx = rx/ <$str> /; say "a" ~~ $rx; say "10" ~~ $rx
Nil
「10」

提供一个“纯”正则表达式当然要容易得多,而不是提供语法(/ /)的正则表达式。

Perl documentation