java 中需要复杂的正则表达式帮助

Complicated regular expression help needed in java

我需要匹配以下变体。

annotation: 103810471047
annotation: 1038104710
ANnoTAtION: 1038104710
ANnoTAtION: 103810571057
Annotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12
ANNotation: asdf1234-as12-as12-as12-asdf1234asdf-abcd1234asdf1234asdf12

我很难想出正确的表达方式。 到目前为止,我已经使用两个前瞻性尝试了以下操作。

\b(\Qannotation\E|)\b((?=[^\w\r\n\.!\?$]{0,5}?)(?:[A-Z\d]+\b|(["']).*?))|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)|((?=[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)[\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}-[\w]{22}\b)

但是好像没有正确匹配。我需要它匹配任何匹配不区分大小写注释的内容,后跟 8-12 位数字之间的数字或包含 8、4、4、4、12、22 个字符的连字符分隔的单词列表。

应该return2组。 第一组是单词 "annotation" 第二组是 8-12 位数字,或带有 8、4、4、4、12、22 个字符的连字符分隔的单词列表。

您可以试试正则表达式:(?i)annotation:.*?\s(?:(?:\d{8,12})|(?:\w{8}-\w{4}-\w{4}-\w{4}-\w{12}-\w{22}))

Demo here