我正在进行一些关于在自由格式文本中识别 DOI 的研究。
我正在使用 Java 8 和正则表达式
我找到了这些应该满足我要求的正则表达式
/^10.\d{4,9}/[-._;()/:A-Z0-9]+$/i
/^10.1002/[^\s]+$/i
/^10.\d{4}/\d+-\d+X?(\d+)\d+<[\d\w]+:[\d\w]*>\d+.\d+.\w+;\d$/i
/^10.1021/\w\w\d++$/i
/^10.1207/[\w\d]+\&\d+_\d+$/i
我正在尝试的代码是
private static final Pattern pattern_one = Pattern.compile("/^10.\\d{4,9}/[-._;()/:A-Z0-9]+$/i", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern_one.matcher("http://journals.ametsoc.org/doi/full/10.1175/JPO3002.1");
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
但是匹配器没有找到任何东西。
我哪里出错了?
更新
我遇到了我的 REGEX 集不匹配的有效 DOI
这是一个示例 DOI:10.1175/1520-0485(2002)032<0870:CT>2.0.CO;2
为什么这种模式不起作用?
/^10.\d{4}/\d+-\d+X?(\d+)\d+<[\d\w]+:[\d\w]*>\d+.\d+.\w+;\d$/i