2013-05-29 16 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 $)。* $」。 –