加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl6 – 我可以修改Perl 6中的文字正则表达式吗?

发布时间:2020-12-16 06:28:25 所属栏目:大数据 来源:网络整理
导读:假设我们有一个规则的屈折模式,不能分割成段.例如.它可以是中缀(在单词中添加一些字母)或元音更改(‘ablaut’).考虑德国人的一个例子. my @words = Vater Garten Nagel;my $search = "/@words.join('|')/".EVAL;"mein Vater" ~~ $search; say $/; # ?Vater?
假设我们有一个规则的屈折模式,不能分割成段.例如.它可以是中缀(在单词中添加一些字母)或元音更改(‘ablaut’).考虑德国人的一个例子.

my @words = <Vater Garten Nagel>;
my $search = "/@words.join('|')/".EVAL;

"mein Vater" ~~ $search;                              
say $/;   # ?Vater?

所有三个德语单词都通过将第二个字母’a’更改为’?’而形成复数.所以’Vater’→’V?ter’,’Garten’→’G?rten’,’Nagel’→’N?gel’.

有没有办法修改我的$search正则表达式,以便它匹配复数形式?
这是我正在寻找的:

my $search_? = $search.mymethod;
"ihre V?ter" ~~ $search_?;
say $/;  # ?V?ter?

当然,我可以修改@words数组并将其“预编译”为新的正则表达式.但是,如果可能的话,直接修改现有的正则表达式会更好.

解决方法

你不能.

正则表达式是Perl 6中的代码对象.因此,您的问题基本上是“我可以在编写子程序后修改子程序或方法吗?”.对于传统的代码对象和正则表达式,答案是相同的:不,首先将它们写入您想要的对象.

也就是说,对于您的用例,您实际上并不需要EVAL.在正则表达式中使用数组变量时,它会作为替代分支的列表进行插值,因此您只需编写:

我的@words =< Vater Garten Nagel&gt ;;
我的$search = / @ words /;

正则表达式$search变为闭包,因此如果您修改@words,您还可以更改$search匹配的内容.

这个特定示例的另一种方法是使用:ignoremark修饰符,它也使?匹配?(尽管还有很多其他形式,例如ā或ǎ.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读