Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';什么是Regex?_Java_Regex - Fatal编程技术网

Java';什么是Regex?

Java';什么是Regex?,java,regex,Java,Regex,Java的Regex.Pattern支持以下字符类: [a-z&&[def]] 与“d、e或f”匹配的,称为交点 从功能上讲,这与: [def] 在大型RE中阅读和理解起来更简单。所以我的问题是,除了指定对字符类上类似CSG的操作的完全支持外,交集还有什么用 (请注意,我了解减法的实用性,如[a-z&[^bc]]和[a-z&&[^m-p]],我特别询问上述交叉点。)我相信特定示例只是一个“概念证明”两个相交的字符类仅匹配分别匹配两个字符集的字符。你提到的减法是算符的实际应用

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

[a-z&&[def]]
与“d、e或f”匹配的,称为交点

从功能上讲,这与:

[def]
在大型RE中阅读和理解起来更简单。所以我的问题是,除了指定对字符类上类似CSG的操作的完全支持外,交集还有什么用


(请注意,我了解减法的实用性,如
[a-z&[^bc]]
[a-z&&[^m-p]]
,我特别询问上述交叉点。)

我相信特定示例只是一个“概念证明”两个相交的字符类仅匹配分别匹配两个字符集的字符。你提到的减法是算符的实际应用


简单地说,没有隐藏的含义。

您可以通过编程在两个集合之间构建匹配的regexp:

String regex = String.format("[%s&&[%s]]", characterClass, whiteList);

虽然我从来没有这样做的必要,但我可以想象使用预定义的字符类,这些字符类彼此不是适当的子集(从而使交集产生与原始两个字符类不同的东西)。例如,仅匹配小写拉丁字符:

[\p{Ll}&&\p{InBasicLatin}]

当一个类不是另一个集的子集时,交集很有用。有许多预定义的字符类(部分列表在中给出),特别是unicode的各个块。假设有一个已定义的块用于所有中文字符,一个用于所有日语字符。有大量的重叠,但两边都不完整(我不确定unicode块类是否反映了这一点)。如果只想匹配两种语言中出现的字符,可以使用两种语言的交集

从理论的角度来看,这是有意义的,但是在实际的例子中,你会使用它吗?也许,但是上面RE的结果与[\p{Lower}]没有什么不同,因为\p{Lower}根据定义,在默认字母表中只是小写字母。如果您的默认字母表不是拉丁字母表,那么RE实际上将不匹配。将\p{Lower}更改为\p{Ll}以避免默认字母表问题。