0

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

列表是,无论使用什么大小写,我都想匹配字符串。

  • packstation - ( packstation | Packstation | PACKSTATION )
  • 打包站 - (打包站 | 打包站 | 打包站 | 打包站 | 打包站)
  • paketstation - ( paketstation | Paketstation | PAKETSTATION )
  • 帕吉特站-(帕吉特站|帕吉特站|帕吉特站|帕吉特站|帕吉特站)

我使用的模式是

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

我的问题是我无法忽略大小写。我尝试在多个地方添加 i 标志,但它只是破坏了模式识别并且没有任何通过。

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

4

1 回答 1

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 中,internal 修饰符是全局的,你只能为整个模式打开它(不管你声明它的位置)。

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

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

于 2013-05-29T09:29:37.340 回答