regexp不是我的强项,但我有一个我要检查的4个字符串的列表。我创建了一个可读的模式(对我而言),因此可以轻松添加更多模式,但我99%确定没有。
列表是,我想匹配字符串,无论使用何种情况。
我使用的模式是
^(?!packstation|pack station|paketstation|paket station$).*$
我的问题是我无法忽视案例。我尝试在多个地方添加i标志,但它只是打破了模式识别,没有任何东西可以通过。
不确定我是否需要创建更复杂的模式,或者它是否与Demandware的regexp有问题,它只接受模式。
答案 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)
将其从指定位置关闭,因为在这些语言中,修改器的作用范围限定在声明它的位置
通常,大多数语言都会为您提供指定主模式外标志的选项。它可以支持它作为主模式的结束分隔符之后的尾随字符,或者它可以在函数调用中支持它。