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

时间:2013-05-29 09:04:13

标签: java regex regex-negation

regexp不是我的强项,但我有一个我要检查的4个字符串的列表。我创建了一个可读的模式(对我而言),因此可以轻松添加更多模式,但我99%确定没有。

列表是,我想匹配字符串,无论使用何种情况。

  • packstation - (packstation | Packstation | PACKSTATION)
  • 包站 - (包站|包站|包站|包站|包站)
  • paketstation - (paketstation | Paketstation | PAKETSTATION)
  • paket站 - (paket站| Paket站| paket站| Paket站| PAKET站)

我使用的模式是

^(?!packstation|pack station|paketstation|paket station$).*$

我的问题是我无法忽视案例。我尝试在多个地方添加i标志,但它只是打破了模式识别,没有任何东西可以通过。

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

1 个答案:

答案 0 :(得分:2)

您没有注明语言。如果您使用的是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:pattern)中使用内部修饰符来限定内部修饰符的范围。您也可以使用(?modifiers)从指定位置打开它,然后使用(?-modifiers)将其从指定位置关闭,因为在这些语言中,修改器的作用范围限定在声明它的位置

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