Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查此奇数空格字符-“ &引用;在Objective-C中?_Objective C_Regex_Nsregularexpression - Fatal编程技术网

如何检查此奇数空格字符-“ &引用;在Objective-C中?

如何检查此奇数空格字符-“ &引用;在Objective-C中?,objective-c,regex,nsregularexpression,Objective C,Regex,Nsregularexpression,我写了一些正则表达式来处理字符串中的空格,它工作得很好,除了我遇到这个字符:“而不是”。你可能认为我疯了,但显然他们是不同的。查看此RegEx应用程序(奇怪的是,它经常崩溃): 当我使用奇怪的空间时: 当我使用普通空间时: 如您所见,这里检测到的空间更多,但它没有检测到奇怪的空间 这个空间是什么?如何消除它?尝试使用“\p{Z}”作为正则表达式。它是任何类型的空白或不可见分隔符的unicode属性 见:和 为了测试我的答案,我构建了以下单元测试 - (void)testPattern {

我写了一些正则表达式来处理字符串中的空格,它工作得很好,除了我遇到这个字符:“而不是”。你可能认为我疯了,但显然他们是不同的。查看此RegEx应用程序(奇怪的是,它经常崩溃):

当我使用奇怪的空间时:

当我使用普通空间时:

如您所见,这里检测到的空间更多,但它没有检测到奇怪的空间

这个空间是什么?如何消除它?

尝试使用“\p{Z}”作为正则表达式。它是任何类型的空白或不可见分隔符的unicode属性

见:和


为了测试我的答案,我构建了以下单元测试

- (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, @"");
}

Unicode有很多不同的功能。您在问题中发布的空间(标题和正文)是一个常规的ASCII空间,很好的旧U+0020

如果您想准确地检查复制到剪贴板上的内容,可以在Mac OS X上运行该命令。例如,如果您复制了一个非中断空间(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]
,其中,
是从要匹配的字符复制粘贴的。

它们可能是不间断的空格,因为所有的线都以空格结尾,而这些空格是由\s匹配的,而不是这些神秘的空格。尝试匹配
\0xA0

您可以将Unicode字符与\x{NNNN}匹配,其中NNNN是字符的十六进制代码。请参阅。

您的帖子中的空格是相同的。你能发布正确的(大概是unicode)字符吗?你必须在十六进制模式下查看原始文本到ASCII数字。有许多ASCII字符没有可见的字符艺术(基本上看起来像一个空格),而不是实际的空格(ASCII 32)字符。我猜这是某种unicode空格,比如不间断空格(U+00A0).看起来你有一些文字处理的散文。你看到的奇怪的空间是否可能是非破坏性空间。因此,也许你的wp或文本布局应用程序有一个特殊的空格字符,不会被行尾替换。e、 “加起来就是一个电影明星”这个短语可能会被分成两行,但奇怪的是,这两行不应该在“to”和“a”之间出现。我不知道你使用了什么应用程序来创建文本,但可能该应用程序中有一个设置,不包括这些非中断空格。哦,杰弗里·托马斯在我前面几秒钟输入了相同的回答。根据该命令,它确实是a0,谢谢。我会试试[\s…]的建议。:)嘿,Xcode甚至似乎有一个特殊的符号。请不要使用PHP正则表达式。对不起,我的意思是Objective-C中没有一个完整的想法。抱歉,它是A0,但无论出于什么原因,应用程序都找不到它。