1

我有许多参考文献,我想用文本中更下方的锚点的链接替换。链接有一个非常规则的形式,所以它应该是非常可行的 - 至少有一个脚本:

引用“[44]”应替换为以下 html 代码:[<a href="ref44">44</a>].

那很容易。使用反向引用进行简单替换。但是是否有一个正则表达式(vim 方言、python 或 ... perl,如果必须的话。太恐怖了!)可以将以下内容转换为类似的链接:[44,45,77,91]?也就是说,每个数字一个链接,其中链接组被一对方括号包围。

由于这涉及(理论上是无界的)内存,它不会与 FSM 1:1 映射,因此应该由某种下推自动机处理,而不是正则表达式,但有些方言更强大,所以 . ..

4

1 回答 1

1

您可以重新运行此正则表达式替换,直到不再进行替换。

正则表达式:(\[(?:<a(?=\s|>)(?:[^>=|&)]|='(?:[^']|\\')*'|="(?:[^"]|\\")*"|=[^'"][^\s>]*)*>.*?<\/a>,)*)(\d+)([,\]])

用。。。来代替:$1<a href="ref$2">$2</a>$3

在此处输入图像描述

捕获组 1 的部分将匹配事件最复杂的复杂锚标记。

例子

示例文本

[22][44,45,77,91]

更换后

第一次:

[<a href="ref22">22</a>][<a href="ref44">44</a>,45,77,91]

第二次:

[<a href="ref22">22</a>][<a href="ref44">44</a>,<a href="ref45">45</a>,77,91]

第三次:

[<a href="ref22">22</a>][<a href="ref44">44</a>,<a href="ref45">45</a>,<a href="ref77">77</a>,91]

第四次:

[<a href="ref22">22</a>][<a href="ref44">44</a>,<a href="ref45">45</a>,<a href="ref77">77</a>,<a href="ref91">91</a>]
于 2013-08-26T00:52:17.777 回答