我写了一些RegEx来使用字符串中的空格,并且它工作得很漂亮,除了我遇到这个字符时:“”而不是“”。你可能认为我疯了,但显然他们是不同的。看看这个RegEx应用程序(奇怪的是,它经常崩溃):
当我使用奇怪的空间时:
当我使用普通空间时:
正如您所看到的,此处检测到的空间更多,但它没有检测到奇怪的空间。
这是什么空间?我该如何摆脱它?
答案 0 :(得分:2)
Unicode有很多不同的space characters。您在问题中发布的空间 - 标题和正文 - 是一个常规的ASCII空间,很好的旧U + 0020。
如果要准确检查已复制到剪贴板上的内容,可以在Mac OS X上运行命令pbpaste(1)
。例如,如果复制了不间断的空格(U + 00A0),你可以像这样识别它:
# Write pasteboard contents to stdout, convert from UTF-8 to UTF-32 for easy
# code point identification, then hex dump the contents
$ pbpaste | iconv -f utf-8 -t utf-32be | hexdump -C
00000000 00 00 00 a0 |....|
00000004
根据您正在使用的正则表达式引擎,它可能不会全部支持它们,特别是如果您使用\s
字符类。如果您想确保匹配您拥有的空格字符,请将其明确地包含在您的字符类中,例如[\s<YOURSPACEHERE>]
,其中<YOURSPACEHERE>
是从您要匹配的字符中复制+粘贴的。
答案 1 :(得分:1)
为正则表达式尝试“\ p {Z}”。它是任何类型的空格或不可见分隔符的unicode属性。
请参阅:NSRegularExpression和Unicode Regular Expressions。
作为对我答案的测试,我构建了以下单元测试。
- (void)testPattern
{
NSString *string = @"xxx\u00A0yyy";
NSString *pattern = @"\\p{Z}";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
NSUInteger number = [regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])];
STAssertEquals(number, 1U, @"");
}
答案 2 :(得分:0)
它们可能是不间断的空间,因为所有的行都以 \ s 而不是这些神秘空间匹配的空格结束。尝试匹配\0xA0
。
答案 3 :(得分:0)
您可以将Unicode字符与\ x {NNNN}匹配,其中NNNN是字符的十六进制代码。请参阅ICU User Guide。