在Java regex.Pattern中设置两个标志

在Java regex.Pattern中设置两个标志,java,regex,unicode,case-sensitive,Java,Regex,Unicode,Case Sensitive,我需要一个这样的匹配者: Matcher kuchen = Pattern.compile("gibt es Kuchen in der K\u00FCche",Pattern.CASE_INSENSITIVE).matcher(""); 问题是它不是简单的ASCII码。我知道在这种特殊情况下,我可以使用[\u00FC\u00DC]来表示ü,但我需要更一般一些(从其他matcher组构建正则表达式)。因此,根据: 默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。可以通过

我需要一个这样的匹配者:

Matcher kuchen = Pattern.compile("gibt es Kuchen in der K\u00FCche",Pattern.CASE_INSENSITIVE).matcher("");
问题是它不是简单的ASCII码。我知道在这种特殊情况下,我可以使用[\u00FC\u00DC]来表示ü,但我需要更一般一些(从其他matcher组构建正则表达式)。因此,根据:

默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。可以通过将Unicode_case标志与此标志一起指定来启用支持Unicode的不区分大小写匹配

有人能告诉我如何同时指定这两个标志吗

试试看

Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE

它应该解决这个问题。或者使用位掩码,您将获得复合功能。

这是一个位掩码,因此您使用位Or运算符
使用位Or,如
模式。不区分大小写的模式。UNICODE\u大小写

虽然更纯粹地使用参数,但与不带参数的
“(?iu)gibt es…”
相同
i
=不区分大小写,
u
=unicode。

更好的做法是在模式本身中应用标志,还是像您的答案中所示在compile中使用标志参数?像Joop的答案那样将其包含在模式中有任何缺点,还是纯粹是偏好?将其包含在模式字符串中的一个潜在优点是可转移性。我的一位同事在没有设置不区分大小写标志的情况下重用了我的一个PCRE正则表达式,如果我将其包含在模式本身中,这不会是一个问题。@Deco这取决于您的设计,当您应用模式或使用标志时,情况可能会有所不同,但是问题是关于标志的。@Deco将标志编译到模式类中比较简单,但是使用regex-paren问号语法可以让您更好地控制标志的开始和/或停止位置。