2012-04-23 77 views
1

下面是代碼NSRegularExpression給予警告

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)" options:NSRegularExpressionCaseInsensitive error:&error]; 

工作本身的代碼,但給出了這樣的警告:

"Unknown escape sequence \." 

我也嘗試過的選項:

NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines 

但仍錯誤仍然存在。任何人都可以解釋爲什麼會出現這個錯誤以及如何刪除它。

+0

請參閱http://stackoverflow.com/questions/6812206/unknown-escape-sequence-regular-expression – 2012-04-23 10:27:29

回答

5

如果你寫你的正則表達式作爲字符串文字,它包含反斜槓,你必須使用第二反斜線逃避他們,因爲反斜槓也被用於在字符串字面轉義一些特殊字符(如\n\t等) 。

所以,如果你想要你的正則表達式包含\.,你必須寫它作爲\\.。同樣,這隻適用於使用字符串文字的情況,而不是如果您要從文件加載正則表達式。

如果您確實想要沒有反斜槓的時間段(實際上您現在有這個時間段),請刪除反斜槓以消除警告。

+0

謝謝。但是這是否改變了功能? – 2012-04-23 10:38:29

+1

是的,它使得這個點在正則表達式中成爲一個字面點,而不是正則表達式語法的一部分。我猜想這就是應該如何使用正則表達式。否則,您必須刪除反斜槓才能在沒有警告的情況下獲得相同的行爲。 – omz 2012-04-23 10:48:10

+0

@omz:我認爲這不會改變這種情況下的含義。警告看起來像來自字符串處理器,而不是正則表達式引擎。這意味着它被隱含地翻譯成'\\。'。但它仍然是一個有用的警告,因爲如果它們沒有正確轉義,其他一些轉義序列(如\ b)(退格與字邊界)會改變它們的含義。 – 2012-04-23 11:07:45