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

我在看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的作用也不明白


回答:

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

以上是 正则表达式?i:^log4j2?用于匹配什么样的字符串? 的全部内容, 来源链接: utcz.com/p/944755.html

回到顶部