我想将正则表达式放入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?
答案 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」
提供一个“纯”正则表达式当然要容易得多,而不是提供语法(/ /)的正则表达式。