2

我正在循环浏览一些带有嵌入式文献参考的文本。其中一些是 DOI 号,我需要将它们链接起来。

示例文本:

<div>Interesting article here:  doi:10.1203/00006450-199305000-00005</div>

到目前为止我已经尝试过:

$html = preg_replace("\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?![\"&\'<>])[[:graph:]])+)\b", "<a href='https://doi.org/\\0' target='_new'>doi:\\0</a>",$html);

这将返回一个空字符串。

我期待着:

<div>Interesting article here:  <a href='https://doi.org/10.1203/00006450-199305000-00005' target='_new'>doi:10.1203/00006450-199305000-00005</a></div>

我哪里错了?

编辑 2018-01-30:根据 Katrin 在下面的回答更新了 DOI 解析器。

4

2 回答 2

1

CrossRef 有一个建议,他们成功地测试了 99.3% 的 DOI:

/^10.\d{4,9}/[-._;()/:A-Z0-9]+$/i

此外,新推荐的解析器位于https://doi.org/.

于 2018-01-30T14:47:58.503 回答
0

使用正则表达式测试工具,我找到了一个适用于我的示例文本的表达式

$pattern        = '(10[.][0-9]{4,}[^\s"/<>]*/[^\s"<>]+)';
$replacement    = "<a href='http://dx.doi.org/$0' target='1'>doi:$0</a>";
$html = preg_replace($pattern, $replacement, $html);

hth

于 2013-02-13T20:27:35.037 回答