使用preg_replace来链接DOI

时间:2013-02-13 19:55:00

标签: regex preg-replace doi

我正在通过一些带有嵌入式文献参考的文本进行循环。其中一些是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解析器。

2 个答案:

答案 0 :(得分:1)

CrossRef has a recommendation,他们成功测试了99.3%的DOI:

GenericTests<String>

另外,new recommended resolver resides at https://doi.org/

答案 1 :(得分:0)

使用Regular Expression Test Tool我发现expression适用于我的示例文字:

$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