2009-12-08 25 views
0

我正在使用RegexKitLite,我試圖匹配一個模式。
以下正則表達式模式無法捕捉包含N的titlde字詞:ñ。 我錯過了字符串轉換嗎?如何將非ASCII字符與RegexKitLite匹配?

subjectString = @"define_añadir"; 
//regexString = @"^define_(.*)"; //this pattern does not match, so I assume to add the ñ  
//regexString = @"^define_([.ñ]*)"; //tried this pattern first with a range 
regexString = @"^define_((?:\\w|ñ)*)"; //tried second 

NSString *captured= [subjectString stringByMatching:regexString capture:1L]; 
//I want captured == añadir 

回答

0

看起來像一個編碼問題給我。要麼將源代碼保存爲無法處理該字符的編碼(如ASCII),要麼編譯器使用錯誤的編碼來讀取源文件。讓我們再回到原來的正則表達式,嘗試創建對象的字符串是這樣的:

subjectString = @"define_a\xC3\xB1adir"; 

或本:

subjectString = @"define_a\u00F1adir"; 

如果這樣的作品,請檢查您的源代碼文件的編碼,並確保它是相同的編碼編譯器期望。

編輯:我從來沒有使用iPhone技術堆棧,但根據this doc你應該使用stringWithUTF8String方法來創建NSString,而不是@""字面語法。事實上,它說你不應該在你的代碼中使用非ASCII字符(也就是說,不在範圍0x00..0x7F中的任何東西);這樣你就不必擔心源文件的編碼。無論您使用何種語言或工具集,這都是很好的建議。

+0

更正:我發佈的示例確實有效 - 我簡化了代碼以便於閱讀,但我可能有更多線索...... 我的源代碼文件.m是UTF8。我使用unix命令'file'進行檢查。這些字符串值實際上是從HTML文件中讀取的,這些文件也是UTF8。 我已經用NSLog打印出文件內容,以顯示「xn - define_aadir-hhb」,我期望將「define_añadir」從HTML讀入subjectString。在你提到艾倫的時候,我可以在哪裏檢查編譯器期望的編碼?另外,我發現的所有源文件都不是UTF8,有的是ASCII。可能這是一個問題? – ojreadmore 2009-12-09 18:20:06

+0

ASCII是UTF-8的子集,因此每個ASCII文件也是一個UTF-8文件。至於其他,請參閱我的編輯。 – 2009-12-10 02:57:59