Java 忽略整个字符串模式的大小写

Java 忽略整个字符串模式的大小写,java,regex,regex-negation,Java,Regex,Regex Negation,regexp不是我的强项,但我有一个4个字符串的列表,我想检查。我创建了一个可读(对我来说)的模式,因此可以轻松添加更多内容,但我99%确信不会有 列表是,我希望匹配字符串,无论使用什么大小写 包装站-(包装站|包装站|包装站) 包装站-(包装站|包装站|包装站|包装站|包装站) 帕克特站-(帕克特站|帕克特站|帕克特站) 帕克特站-(帕克特站|帕克特站|帕克特站|帕克特站|帕克特站) 我使用的模式是 ^(?!packstation|pack station|paketstation|pak

regexp不是我的强项,但我有一个4个字符串的列表,我想检查。我创建了一个可读(对我来说)的模式,因此可以轻松添加更多内容,但我99%确信不会有

列表是,我希望匹配字符串,无论使用什么大小写

  • 包装站-(包装站|包装站|包装站)
  • 包装站-(包装站|包装站|包装站|包装站|包装站)
  • 帕克特站-(帕克特站|帕克特站|帕克特站)
  • 帕克特站-(帕克特站|帕克特站|帕克特站|帕克特站|帕克特站)
我使用的模式是

^(?!packstation|pack station|paketstation|paket station$).*$
我的问题是我不能忽视这个案子。我曾尝试在多个地方添加I标志,但它只是破坏了模式识别,什么都无法通过


不确定我是否需要创建更复杂的模式,或者Demandware的regexp是否有问题,它只接受一个模式。

您没有指明语言。如果您使用的是Java、Python、Ruby、Perl、.NET或PCRE(PHP),那么可以在模式中添加一个内部修饰符
(?i)
。就你而言:

(?i)^(?!packstation|pack station|paketstation|paket station$).*$
您也可以将其缩短为:

(?i)^(?!pack ?station|paket ?station$).*$
对于这种情况,正则表达式在上面列出的所有语言中都具有相同的效果

请注意,正则表达式将拒绝:

packstation
PackStation
PACKSTATION
pAcKstAtioN
所有大小写字母组合将被拒绝

在Python中,内部修饰符是全局的,您只能为整个模式启用它(无论您在何处声明它)

在Java、Ruby、Perl、.NET或PCRE中,可以通过在非捕获组中使用内部修饰符来限定其作用域
(?修饰符:模式)
。您还可以使用
(?-modifiers)
从指定位置将其打开,并使用
(?-modifiers)
从指定位置将其关闭,因为在这些语言中,修饰符的作用范围是声明它的位置


通常,大多数语言都会提供一个选项来指定主模式之外的标志。它可能支持将其作为主模式的结束分隔符后的尾随字符,也可能在函数调用中支持它。

是否要匹配这些字符串并在执行此操作时忽略大小写?语言是什么?@jerry我想是的,如果你的意思是我想匹配而不考虑大小写,那么packstation可以(packstation | Packstaion | packstation)@nhahtdh你是说口语还是编程语言?语言是德语,编程语言是基于java的,因为它的需求是德语。@bdjohnson:我在问编程语言。(当你问regex时,总是用一个来标记你的问题)。非常感谢您的解释和示例,很抱歉我没有用语言标记它,但我正在使用isml模板(基本上是一个扩展的jsp页面)使用的xml文件中的regexp功能。因此,假设它是java,但我所能做的就是交上一个模式。例如regexp=“(?I)^(?!pack?station | paket station$).$”。