正则表达式?i:^log4j2?用于匹配什么样的字符串?

作者站长头像
站长
· 阅读数 14

我在看log4j-api-2.17.2.jar的源码时,类 org.apache.logging.log4j.util.PropertySource.Util 中的

private static final Pattern PROPERTY_TOKENIZER

    = Pattern.compile("(?i:^log4j2?[-._/]?|^org\\.apache\\.logging\\.log4j\\.)?([A-Z]*[a-z0-9]+|[A-Z0-9]+)[-._/]?")

正则表达式最开始这一部分 ?i:^log4j2? 看不懂,不知道是用来匹配什么样的字符?

PROPERTY_TOKENIZER的作用也不明白

回复
1个回答
avatar
test
2024-07-18

(?i:这4个字符连起来可看成是非捕获组的开始部分,意思就是说从(开始到)结束这一组是非捕获组,因为()是一个组,在这个组里增加一个?表示这是一个非捕获组,也就是说在后续的替换操作或者匹配操作中不把()之间的内容看作需要注意的内容。?后面的i表示在对此组做匹配时忽略大小写,而i后面的:表示将修饰符和真正的内容分开,:后面就真正要匹配的部分了。后面的^表示以后面的内容为开头的字符串,比如log4jLOG4J以及Log4j都是符合要求的,因为前面的i表示忽略大小写

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容