Perl6 получает регулярное выражение из строки - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу поместить регулярное выражение в файл конфигурации 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?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Я думаю, что это хорошая идея для компиляции внешних регулярных выражений, так что вы сразу же знаете, если они потерпят неудачу (и впоследствии они будут быстрее):

Perl6 REPL:

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

OfКонечно, проще обеспечить «чистое» регулярное выражение, а не синтаксис, который также имеет синтаксис (/ /).

Документация Perl

0 голосов
/ 24 ноября 2018

Вы интерполируете строку, содержащуюся в переменной $var, в регулярное выражение через / <$var> / или, в случае более сложных выражений, таких как ваше, / <{ @h[0]<regex> }> /.

Обратите внимание, что вы сначаладолжны удалить врезные косые черты из вашей строки.Для надежного ввода всегда есть EVAL ...

...