如何引用语法中先前匹配的项目?

2024-02-04

我正在尝试解析 BibTeX 作者字段,并将其拆分为单独的作者。这将帮助我重写每个作者的姓名首字母。这是一个最小的例子:

use v6;

my $str = '{Rockhold, Mark L and Yarwood, RR and Selker, John S}';

grammar BibTexAuthor {
    token TOP {
        <all-text> 
    }
    token all-text {
        '{' <authors> '}' 
    }
    token authors { 
        [<author> [' and ' || <?before '}'>]]+
    }
    token author {
        [<-[\s}]> || [' ' <!before 'and '>]]+
    }
}

class BibTexAuthor-actions {
    method TOP($/) {
        say $/;
        print "First author = ";
        say $<author>.made[0];
        make $/.Str;
    }
    method all-text($/) {
        make $/.Str;
    }
    method authors($/) {
        make $/.Str;
    }
    method author($/) {
        make $/.Str;
    }
}
my $res = BibTexAuthor.parse( $str, actions => BibTexAuthor-actions.new).made;

Output:

「{Rockhold, Mark L and Yarwood, RR and Selker, John S}」
 all-text => 「{Rockhold, Mark L and Yarwood, RR and Selker, John S}」
  authors => 「Rockhold, Mark L and Yarwood, RR and Selker, John S」
   author => 「Rockhold, Mark L」
   author => 「Yarwood, RR」
   author => 「Selker, John S」
First author = Nil

为什么我无法提取第一作者TOP method?


为什么我无法提取第一作者TOP method?

因为您并没有真正在操作方法中提取任何数据。您所要做的就是将匹配的字符串附加到$/.made,这实际上并不是你最终想要的数据。

如果你最终想有不同的作者,你应该make一系列作者authors动作方法。例如:

use v6;

my $str = '{Rockhold, Mark L and Yarwood, RR and Selker, John S}';

grammar BibTexAuthor {
    token TOP {
        <all-text> 
    }
    token all-text {
        '{' <authors> '}' 
    }
    token authors { 
        [<author> [' and ' || <?before '}'>]]+
    }
    token author {
        [<-[\s}]> || [' ' <!before 'and '>]]+
    }
}

class BibTexAuthor-actions {
    method TOP($/) {
        make { authors => $<all-text>.made };
    }
    method all-text($/) {
        make $/<authors>.made;
    }
    method authors($/) {
        make $/<author>».made;
    }
    method author($/) {
        make $/.Str;
    }
}
my $res = BibTexAuthor.parse( $str, actions => BibTexAuthor-actions.new).made;

say $res.perl;

prints

${:authors($["Rockhold, Mark L", "Yarwood, RR", "Selker, John S"])}

所以现在.made顶级匹配的值是一个哈希值,其中authorskey 保存一个数组。如果您想访问第一作者,您现在可以说

say $res<authors>[0];

to get Rockhold, Mark L

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何引用语法中先前匹配的项目? 的相关文章

随机推荐

  • 基于 .net ComputeHash 的 SQL CLR 函数不适用于西里尔语

    我写了以下内容SQL CLR函数 以散列大于 8000 字节的字符串值 输入值的限制T SQL内置的HASHBYTES功能 SqlFunction DataAccess DataAccessKind None IsDeterministic
  • 用不同的语言运行 Qt 应用程序?

    我正在开发一个 Qt 应用程序 该应用程序曾经是 KDE 应用程序 在过去 我只需要使用一些语法 例如 KDELANG de my app 它以德语运行 my app 并且仅运行 my app 它可能不是 KDELANG 但它是类似的一些环
  • “出壳”或“出壳”是什么意思?

    正如这些示例中所使用的 例如 从bundle exec调用的命令内部shell到bundle or shell 执行一个不属于当前包的 Ruby 命令 http bundler io man bundle exec 1 html http
  • 在 Mercurial 中,hg grant 和 hg rebase 有什么区别

    I know Rebase https www mercurial scm org wiki RebaseExtension是一个 捆绑的 扩展 而Graft http selenic com hg help graft是一个核心功能 取代
  • 声纳安装问题

    有关安装的信息 使用嵌入式数据库Derbis 问题 I run bin windows x86 32 StartSonar bat然后单击http 本地主机 9000 http localhost 9000 单击此按钮后 我收到以下错误 W
  • 项目构建停止于:“构建延迟,直到 Bower/npm 包完成恢复。”

    在 VS 2017 中 我使用 Angular 模板创建了一个新的 ASP NET Core Web 应用程序 然而该项目无法运行 它卡在 Build delayed until Bower npm packages finish rest
  • 将库添加到 Vivado 2014.4

    我对 Vivado 和 VHDL 还很陌生 我想要一些关于基本问题的指导 我猜我可以创建自己的库并在我的项目中使用它们 就像使用默认库和基本库一样 eg library IEEE use IEEE std logic 1164 ALL us
  • 如何拆分邮件合并并以合并字段作为名称保存文件

    我设置了一堆邮件合并模板 当我合并文档时 我想将结果拆分为单独的文件 每个文件的名称基于合并字段 FileNumber 我目前拥有的代码是 Sub splitter Based on a macro by Doug Robbins to s
  • 使用 Shiro 登录后重定向到最后访问的页面

    使用 apache shiro 登录并重定向到最后访问的页面的更好方法是什么 我只有这个 SecurityUtils getSubject login new UsernamePasswordToken username password
  • 将“NonSerializedAttribute”设置为自动属性

    这在 C 中无法完成 有什么办法可以做到吗 laugh 以防我的双关语不被理解 我的意思是 如何将 C 中的属性标记为 NonSerialized 当然 当属性包含逻辑时 很自然地无法做到这一点 但是自动属性是可序列化的 因此 我希望有某种
  • 头部和身体之间的脚本元素。 [HTML5] [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 当我向W3C验证时 我收到了回复 头
  • TensorFlow Serving:将图像传递给分类器

    我在 Tensorflow Python tensorflow 1 9 0 和 tensorflow serving 1 9 0 中构建了一个简单的分类器 它将对象分类为 5 个类之一 现在 我想为该模型提供服务 我已经导出它并给它一个分类
  • 未使用哈希默认值[重复]

    这个问题在这里已经有答案了 今天我尝试了以下代码片段 但我不明白为什么它们之间会得到不同的结果 据我所知 它们是相同的 一使用默认值offHash另一个片段在访问该键之前为该键创建一个空数组 有谁明白发生了什么事吗 Hash default
  • Makefile C子目录规则make obj

    我正在运行一个简单的 Makefile 没有任何问题 CC gcc CFLAGS std c99 ggdb Wall I DEPS hellomake h OBJ hellomake o hellofunc o o c DEPS CC c
  • MySQL存储过程创建用户

    我正在尝试创建一个存储过程来在 mysql 服务器 5 6 21 中创建用户 但它抛出以下错误 错误代码 1445 不允许从存储的函数设置自动提交 或触发 下面的代码 CREATE PROCEDURE add User IN p Name
  • 在 SwiftUI 中为多值更改贡献动画(动画弃用)

    所以 我有一些结构为我提供了很多参数 struct MyAppearance public var offset CGSize zero public var scale CGFloat public var rotation SwiftU
  • HSV OpenCv 颜色范围[重复]

    这个问题在这里已经有答案了 谁能告诉我一个网站的名称或任何地方我可以从哪里获得基本颜色的 HSV 上限和下限范围 例如 黄 绿 红 蓝 黑 白 橙 实际上 我正在制作一个机器人 它首先会遵循黑色线 然后在线的中间会给出另一种颜色 其中 3
  • 可拖动图钉 Windows Phone 7 bing 地图控件

    只是想知道是否有任何关于如何在 Windows Phone 7 应用程序中为地图编写可拖动图钉的资源 我仔细查看了 只能找到有关如何为浏览器应用程序执行此操作的信息 理想情况下 我希望用户能够单击图钉并将其拖动到地图上的某个位置 但是 目前
  • SQL Server FTI:如何检查表状态?

    在 SQL Server 全文索引方案中 我想知道表是否在 start chage tracking mode update index mode start change tracking and start background upd
  • 如何引用语法中先前匹配的项目?

    我正在尝试解析 BibTeX 作者字段 并将其拆分为单独的作者 这将帮助我重写每个作者的姓名首字母 这是一个最小的例子 use v6 my str Rockhold Mark L and Yarwood RR and Selker John