我正在尝试在 50,000 字的降价文档中超链接 400 个左右的关键字。
这是 Perl“构建链”中的几个步骤之一,因此在 Perl 中实现超链接也是理想的。
我有一个单独的文件,其中包含所有关键字,并将每个关键字映射到应替换为的 markdown 片段,如下所示:
keyword::(keyword)[#heading-to-jump-to]
上面的例子暗示在源 Markdown 文档中出现“keyword”的地方,它应该被 markdown 片段“(keyword)[#heading-to-jump-to]”替换。
忽略作为其他关键字的子字符串出现的关键字、复数/单数形式和模棱两可的关键字,它相当简单。但自然地,还有两个额外的限制。
我只需要匹配以下关键字的实例:
- 不在不开始的行上#
- 不是最直接在要跳转到的标题下方
这些简单的英文含义是:不要匹配任何标题中的关键字,也不要替换它们将链接到的标题下的关键字。
我的 Perl 脚本读取 $keyword::$link 对,然后逐对将它们替换为正则表达式,然后用该正则表达式搜索/替换文档。
我已经使用 Regex Buddy 的 JGSoft 正则表达式实现编写了一个正则表达式来进行匹配(对于到目前为止我手动测试的情况)。它看起来像这样:
Frog::(Frog)[#the-frog)
-->
([Ff]rog'?s?'?)(?=[\.!\?,;: ])(?<!#+ [\w ]*[Ff]rogs?)(?<!#+ the-frog)(?<!#+ the-frog[^#]*)
这个问题(或者,也许是一个问题)是它使用了 Perl 不支持的可变长度回溯。所以我什至无法在完整文档上测试这个正则表达式,看看它是否真的有效。
我已经阅读了一堆关于如何解决可变长度回溯的其他帖子,但我似乎无法针对我的特定情况进行正确处理。任何常驻的正则表达式向导都可以帮助在 Perl 中执行更整洁的正则表达式吗?