2013-05-29 20 views
0

regexp并不是我的强项,但我有一个我想检查的4个字符串的列表。我创建了一个可读的模式(对我来说),所以可以很容易地添加更多的模式,但我肯定不会有任何模式。忽略整个字符串模式的情况

该列表是,我想匹配字符串,无论使用什么样的情况。

  • packstation - (packstation | Packstation | PACKSTATION)
  • 包站 - (包站|包站|包站|包站|打包工作站)
  • paketstation - (paketstation | Paketstation | PAKETSTATION)
  • 一揽子贷款站 - (一揽子贷款站| PAKET站|一揽子贷款站| PAKET站| PAKET站)

我使用的模式是

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

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

不确定是否需要创建更复杂的模式,或者如果它是Demandware的正则表达式接受模式的问题。

+0

您是否想要匹配这些字符串并忽略这种情况? – Jerry

+0

什么是语言? – nhahtdh

+0

@jerry我认为是的,如果你的意思是我想匹配无论情况如此packstation可以(packstation | Packstaion | PACKSTATION) –

回答

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)将其从指定位置关闭,因为在这些语言中,修饰符的效果被限定到声明的位置。

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

+0

非常感谢解释和例子,抱歉我没有用语言标记它,但是我在xml文件中使用了正则表达式功能,由isml模板(基本上是扩展的jsp页面)使用。所以假设它的Java,但我所能做的就是交出一种模式。像regexp =“(?i)^(?pack?station | paket?station $)。* $”。 –