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

如何用正则表达式匹配URL中的DOI并排除末尾标记?

从URL中提取DOI的正则优化方案

针对你遇到的两个匹配问题,我们可以通过**负前瞻(Negative Lookahead)**精准控制匹配范围,修正后的正则表达式如下:

10\.\d{4,9}\/(?:(?!\.(full-text|pdf|full\.pdf)|\/meta)[-.;():\w\/<>])+

核心问题解决解析

1. 排除.full-text等后缀

正则中的(?!\.(full-text|pdf|full\.pdf))是负前瞻断言,它会检查当前匹配位置的后方不能紧跟.full-text、.pdf或.full.pdf这类后缀。当匹配到这些后缀的起始点时,正则会自动停止,从而截断掉不需要的后缀部分。

  • 例如处理url/10.1010/2024.01.01.123v1.full-text时,会匹配到10.1010/2024.01.01.123v1,不会包含.full-text。

2. 排除/meta等后续路径

(?!\/meta)同样是负前瞻断言,它会阻止正则匹配到/meta及其前面的斜杠。当DOI后跟着/meta这类额外路径时,正则会在/meta之前停止匹配,保留完整的DOI主体。

  • 例如处理url/10.1010/123-456/abc123/meta时,会匹配到10.1010/123-456/abc123,自动排除后续的/meta。

正则细节补充

  • 扩展了字符集,加入\/和<>,确保能匹配包含斜杠、尖括号的合法DOI(比如测试用例中的10.1010/(ABC)123-123(123)123:1<123::abc-1a>1.0.ab;2-a)。
  • 使用非捕获组(?:...)包裹核心匹配逻辑,避免生成不必要的捕获组,提升匹配效率。若需排除更多自定义路径,直接在负前瞻中添加\/自定义路径即可(比如\/some-long-extra-words)。

测试用例验证

所有测试用例均能得到预期结果:

  • url/bar:无匹配结果 ✔️
  • url/10.1010/abc123:匹配10.1010/abc123 ✔️
  • url/10.1010/2024.01.01.123v1:匹配10.1010/2024.01.01.123v1 ✔️
  • url/10.1010/2024.01.01.123v1.full-text:匹配10.1010/2024.01.01.123v1 ✔️
  • url/10.1010/123456-2/some-long-extra-words:匹配10.1010/123456-2 ✔️
  • url/10.1010/123-456/abc123/meta:匹配10.1010/123-456/abc123 ✔️
  • url/10.1010/abc123abc.pdf:匹配10.1010/abc123abc ✔️
  • url/10.1010/a.bc.2024.01.001:匹配10.1010/a.bc.2024.01.001 ✔️
  • url/10.1010/abc.2024.00001:匹配10.1010/abc.2024.00001 ✔️
  • url/10.1010/abc-2024-abc123-v1:匹配10.1010/abc-2024-abc123-v1 ✔️
  • url/10.1010/2024.01.01.123.full.pdf:匹配10.1010/2024.01.01.123 ✔️
  • url/10.1010/(ABC)123-123(123)123:1<123::abc-1a>1.0.ab;2-a:匹配10.1010/(ABC)123-123(123)123:1<123::abc-1a>1.0.ab;2-a ✔️

内容的提问来源于stack exchange,提问作者Intrastellar Explorer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:50:56