2013-02-04 63 views
0

我必須檢查字符串中的第三個字符。我試圖用NSPredicate來做到這一點。我想正則表達式應該是..三合一*所以它會發現每串第三個字符3,但它沒有工作,我也嘗試了一些其他方法沒有成功:(。有人能幫助我嗎?使用正則表達式檢查字符串中的第三個字符

簡單的代碼來檢查

- (IBAction)btnCheckPerformClick:(id)sender { 
_chkOk.state = NO; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@", _txtRegExpression.stringValue]; 
NSLog(@"%@", predicate); 
if([predicate evaluateWithObject:_txtCheckingText.stringValue]) 
    _chkOk.state = YES; 
} 

感謝

回答

1

LIKE運營商在謂語形式語言只能理解簡單的通配符(?*)。如果您想使用正則表達式,則需要使用MATCHES

有關詳細信息,請參閱Predicate Programming Guide (String Comparisons)。可以使用NSRegularExpression

+0

它與'..3。*'一起工作好。我正在嘗試這個,但只是'.3 *' – kubo

+0

如果您只是使用'..3'作爲正則表達式,它將匹配blahblah3blah。確保你按照我的答案來定位它。 – jgm

+0

不是真的。 '..3'只會匹配'aa3'而不是'aa3a'或'aaaaa3aa'。 – kubo

1

你缺少一個多點 - 使用..3.*你可能也想用^..3.*$將它錨定到開始和結束的字符串

+0

你不需要''* $'在該正則表達式的末尾,它不會爲這個用例做任何事情。 – jgm

+0

可能不會,但在處理多行輸入時可能會有所幫助。 –

+0

'Predicate:SELF LIKE [c]「^ .. 3。* $」 SearchingText:aa3aaa' 相同,不起作用。 – kubo

1

..3*。意味着任何兩個字符後跟一個可選的3,在您輸入的任何地方。你想要^..3,這意味着任何兩個字符後面跟着3,從行首開始。

+0

'Predicate:SELF LIKE [c]「^ .. 3」 SearchingText:aa3aaa' Does't work – kubo

+0

正如@omz指出的那樣,您需要使用MATCHES而不是LIKE作爲正則表達式。 – jgm

1
..3* 

那個正則表達式不會做你想要的。

它說,任何兩個角色,那麼任何數量的3的(含3號的)

這件怎麼樣的?

^..3.*$ 
+0

沒有不工作任何人 – kubo

0

您也可能會考慮使用NSString方法subStringWithRange:呢? 如果您對正則表達式不滿意,請不要急於使用正則表達式。使用有用的東西。可可的正則表達式實現並不是最容易開始的事情。 抓住你的字符串,然後比較它。 你可以遍歷字符串來獲取每個第三個字符。

NSString *aString = @"abc"; 
NSString *thirdCharacterOnly; 
if (aString.length >= 3) { 

    for (NSUInteger i = 2; i < aString.length; i += 3) { 
     thirdCharacterOnly = [aString substringWithRange:NSMakeRange(2, 1)]; 
     if ([thirdCharacterOnly isEqualToString:@"3"]) { 
       // Do something. 
     } 
    } 

} else { 
     // do something different. 
} 

如果您想要正則表達式的更多信息,請撥打THE book。 3章將幫助你加快速度。首先用Ruby,Python或Perl學習正則表達式。它會拯救你的大腦。

相關問題