2012-06-06 43 views
1

我試過閱讀蘋果文檔,但我永遠不會使用正則表達式,而且我不明白如何解決此問題。 我需要編寫一個正則表達式來檢查用戶是否選擇了與此規則匹配的字符串: 第一個字母可以是s或S,也可以是可選的 第二個字符可以是a。 (字符點),它是可選的 4個數字可以從1到4,並且必須始終存在 在數字可能存在之後,來自a-z的任何單個字符並且可以是可選的 。 (焦點)和它的可選 最後2必須是一個數字必須始終爲2號和可選配iOS構建正則表達式以供NSRegularExpression使用

我想用這種方式

NSString *regexStr = @"(s|S)?(\\.)?(\\d+){,4}([a-z]?(\\.)?(\\d+){2}?"; 

寫但控制檯給這個錯誤

Error making regex: Error Domain=NSCocoaErrorDomain Code=2048 
"The operation couldn’t be completed. (Cocoa error 2048.)" UserInfo=0x6d3e9b0 
{NSInvalidValue=(s|S)?(\.)?(\d+){,4}([a-z]?(\.)?(\d+){2}?} 

任何人都可以幫助我嗎? 謝謝!

回答

2

在這裏你去:

(s|S)?(\.)?(\d){0,4}[a-z]?(\.)?(\d){2}? 

您有一個額外的左括號是做語法無效,\d年代後+跡象,這使得正則表達式接受的數字無限的數字。

Regexpal是偉大的調試正則表達式:http://regexpal.com/

+0

感謝潤的幫助和該鏈接的好的建議。 –

+0

我試過並以這種方式工作NSString * regexStr = @「(s | S)?(\。)?(\\ d){2,4} [az]?[az]?(\。)? 「;問題是表達式的最後部分,即最後2個可選數字。如果我以這種方式修改NSString * regexStr = @「(s | S)?(\。)?(\\ d){2,4} [az]?[az]?(\。)?(\\ d ){2}「?;使用這樣的代碼make s.10不匹配結果而s.1000匹配數是1.似乎最後一個選項會將其他2位數添加到掩碼,但我需要以這種方式修改:驗證最後2個數字只有在存在最後一個點字符時。可能嗎?謝謝 –

+0

噢,當你輸入字符串時你仍然需要跳過反斜槓:@「(s | S)?(\\。)?(\\ d){0,4} [az]?(\\ 。)?(\\ d){2}?」。 – geon

相關問題