正则表达式?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
后面的:
表示将修饰符和真正的内容分开,:
后面就真正要匹配的部分了。后面的^
表示以后面的内容为开头的字符串,比如log4j
和LOG4J
以及Log4j
都是符合要求的,因为前面的i
表示忽略大小写
以上是 正则表达式?i:^log4j2?用于匹配什么样的字符串? 的全部内容, 来源链接: utcz.com/p/944755.html