You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新正则表达式以匹配多种格式的DOI(含链接、特殊字符)

多格式DOI提取的PHP正则解决方案

适配的DOI格式

  • 带空格或无空格的DOI标识:DOI: 10.xxxx...、DOI:10.xxxx...
  • HTTPS/HTTP链接形式:https://doi.org/xxxx...、http://dx.doi.org/xxxx...
  • 包含&符号的特殊DOI:例如DOI: 11.11111/aaa.111&1111&11

更新后的正则表达式

$pattern = '/(?:DOI: ?|https?:\/\/(?:dx\.)?doi\.org\/)([\w\/.&-]+)(?=\s|$|[,.!?;])/i';

正则说明

  • (?:DOI: ?|https?:\/\/(?:dx\.)?doi\.org\/):匹配所有可能的DOI前缀,非捕获组避免生成多余匹配结果
    • DOI: ?:兼容带空格或无空格的DOI标识写法
    • https?:\/\/(?:dx\.)?doi\.org\/:匹配HTTP/HTTPS开头的DOI链接,同时兼容dx.doi.org和doi.org两种域名
  • ([\w\/.&-]+):捕获DOI主体部分,允许字母、数字、下划线、斜杠、点、&、连字符,直接覆盖含&的特殊DOI场景
  • (?=\s|$|[,.!?;]):正向预查规则,确保匹配到的DOI在空白、文本结尾或常见标点前停止,避免误捕获无关内容
  • /i:忽略大小写,兼容doi:或Doi:等大小写变体

PHP代码示例

// 示例大文本
$text = "这里是包含多种DOI的测试文本:DOI: 10.1234/abc.567,https://doi.org/10.9876/def.012,DOI:11.11111/aaa.111&1111&11,http://dx.doi.org/10.5555/ghi.345";

// 正则匹配
$pattern = '/(?:DOI: ?|https?:\/\/(?:dx\.)?doi\.org\/)([\w\/.&-]+)(?=\s|$|[,.!?;])/i';
preg_match_all($pattern, $text, $matches);

// 提取到的所有DOI主体
$extractedDOIs = $matches[1];

// 输出结果
print_r($extractedDOIs);

运行后会输出所有符合格式的DOI,包括含&的特殊版本。

注意事项

  • 如果文本中DOI后无明显分隔符,可适当调整正向预查规则(比如去掉标点限制),但可能会引入少量误匹配
  • 若需要保留完整的DOI链接(如https://doi.org/10.xxx),只需去掉正则中的捕获组,直接匹配整个前缀+主体即可

内容的提问来源于stack exchange,提问作者palka tt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:52:10