2012-12-10 92 views
-6

如何檢查字符串是否符合以下規則?簡單Reg表達式

1)字符串不能包含以下字符:

·代字號(〜)

·數字符號(#)

·百分比(%)

·符號(&)

·星號(*)

·括號({})

·反斜槓()

·冒號(:)

·尖括號(<>)

·問號(?)

·斜線(/)

·pipe(|)

·引號(「)

2)字符串不能包含點(的序列)

3)字符串在的結尾必須不包含點和begining

4)字符串必須不以下列詞語結束

·。文件

·_files

·文件

·_fichiers

·_bestanden

·_file

·_archivos

·-filer

·_tiedostot

·_pliki

·_soubory

·_elemei

·_ficheiros

·_arquivos

·_dosyalar

·_datoteke

·_fitxers

·_failid

·_fails

·_bylos

·_fajlovi

·_fitxategiak

u能幫助我這個簡單的模板? 它應該分開還是分開?

+6

哇............. – Tigran

+0

絕對不是複製粘貼的家庭作業...對嗎? –

+0

你需要一個單一的正則表達式嗎?每個點本身都是微不足道的,並由任何合理的正則表達式教程覆蓋。 –

回答

1

以你的規則輪流:

  1. 有兩種可能性。要麼你檢查給定的人物之一的存在和扭轉Match結果:

    @"[~#%&*{}\\:<>?/|""]" 
    

    說明並\來轉義,否則不必要逃脫:""只是一個單一的"當內逐字字符串。其他的元字符,如*?|不需要字符類內進行轉義。

    如果你有相當的剛性框架,只允許使用一個有效的模式積極的比賽,你可以檢查是否有非這些字符,請使用否定的字符類和主持人:

    @"^[^~#%&*{}\\:<>?/|""]*$" 
    

    替代地使用負先行:

    @"^(?!.*[~#%&*{}\\:<>?/|""])" 
    
  2. 再次,這是最簡單的具有負的匹配。聲明輸入爲無效,如果你可以搭配:

    @"[.]{2}" 
    

    如果這是不可能的,負先行相當於大概是最簡單的:

    @"^(?!.*[.]{2})" 
    
  3. 再次,使用負匹配,使您的生活簡單:

    @"^[.]|[.]$" 
    

    或者,你可以使用一個否定的字符類或前瞻:

    @"^[^.].*[^.]$" 
    @"^(?![.]).*$(?<![.])" 
    
  4. 同樣的事情,如果你能扭轉Match輸出,你可以使用:

    @"(?:[.]files|_files|-Dateien|_fichiers|_bestanden|...)$" 
    

    另外,採用回顧後:

    @"$(?<![.]files|_files|-Dateien|_fichiers|_bestanden|...)" 
    

    事實上,你可以包括的第二檢驗規則3到這一個,如果你喜歡:

    @"$(?<![.]|[.]files|_files|-Dateien|_fichiers|_bestanden|...)" 
    

最後,使用一些環視解決方案,你可以將所有的這些成一個單一的模式:

@"^(?![.]|.*[.]{2})[^~#%&*{}\\:<>?/|""]*$(?<![.]|[.]files|_files|-Dateien|_fichiers|_bestanden|...)" 

Here is a good tutorial你應該考慮通讀。

+0

Man ...你是正確的RegEx參考! :-) – 2012-12-10 14:55:48

+0

不是@ -symbol特別用於寫入字符串,其中\不被用作轉義字符嗎? (只有「需要加倍) –

+0

@mr_georg是的,但是正則表達式引擎也需要轉義反斜線,這樣編譯後的字符串仍然包含兩個反斜槓,如果我們遺漏了'@',我們需要四個反斜槓代表 –