Java正则表达式中字符类交叉点的背后是什么?

Chr*_*her 11 java regex

Java的Regex.Pattern支持以下字符类:

[a-z&&[def]]
Run Code Online (Sandbox Code Playgroud)

它与"d,e或f"匹配,称为交集.

在功能上,这与以下内容没有区别:

[def]
Run Code Online (Sandbox Code Playgroud)

这在大型RE中更易于阅读和理解.所以我的问题是,除了在字符类上指定对类似CSG的操作的完全支持之外,交叉点有什么用?

(请注意,我理解像减法的效用[a-z&&[^bc]][a-z&&[^m-p]],我对交叉口专门询问如上介绍.)

iam*_*ael 4

尽管我从未需要这样做,但我可以想象使用预定义的字符类,这些字符类不是彼此的正确子集(从而使交集产生与原始两个字符类不同的东西)。例如仅匹配小写拉丁字符:

[\p{Ll}&&\p{InBasicLatin}]
Run Code Online (Sandbox Code Playgroud)