如何将非ASCII字符与RegexKitLite匹配?

时间:2009-12-08 21:43:04

标签: objective-c regex iphone cocoa-touch nsstring

我正在使用RegexKitLite而我正在尝试匹配模式 以下正则表达式模式不会捕获包含带有标题的N的单词:ñ。 我缺少字符串转换吗?

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

1 个答案:

答案 0 :(得分:0)

对我来说看起来像编码问题。您要么将源代码保存在无法处理该字符的编码中(如ASCII),要么编译器使用错误的编码来读取源文件。回到原始的正则表达式,尝试创建这样的主题字符串:

subjectString = @"define_a\xC3\xB1adir";

或者这个:

subjectString = @"define_a\u00F1adir";

如果可行,请检查源代码文件的编码,并确保它与编译器期望的编码相同。

编辑:我从未使用过iPhone技术堆栈,但根据this doc,您应该使用stringWithUTF8String方法创建NSString,而不是@""文字语法。实际上,它表示你不应该在代码中使用非ASCII字符(即,0x00..0x7F范围内的任何字符);这样你就不用担心源文件的编码了。无论您使用何种语言或工具集,这都是一个很好的建议。