我正在通过一些带有嵌入式文献参考的文本进行循环。其中一些是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解析器。
答案 0 :(得分:1)
CrossRef has a recommendation,他们成功测试了99.3%的DOI:
GenericTests<String>
答案 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