4

文字列内のスペースで遊ぶ正規表現をいくつか書きましたが、「 」ではなく「 」という文字に出くわした場合を除いて、美しく機能します。あなたは私が頭がおかしいと思うかもしれませんが、どうやら彼らは違うようです。この RegEx アプリをチェックしてください (奇妙なことに、しばしばクラッシュします)。

奇妙なスペースを使用すると:

ここに画像の説明を入力

通常のスペースを使用する場合:

ここに画像の説明を入力

ご覧のとおり、ここではさらに多くのスペースが検出されていますが、奇妙なスペースは検出されていません。

このスペースは何ですか?どうすればそれを取り除くことができますか?

4

4 に答える 4

2

Unicode にはさまざまなスペース文字がたくさんあります。質問に投稿したスペース (タイトルと本文の両方) は、通常の ASCII スペース、古き良き U+0020 です。

クリップボードにコピーしたものを正確に確認したい場合は、pbpaste(1)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<YOURSPACEHERE>]<YOURSPACEHERE>一致させたい文字から をコピーして貼り付けます。

于 2013-07-31T22:43:55.783 に答える
1

正規表現として "\p{Z}" を試してください。これは、あらゆる種類の空白または目に見えない区切り記号の Unicode プロパティです。

参照: NSRegularExpressionおよび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, @"");
}
于 2013-07-31T22:40:54.530 に答える
0

Unicode 文字は \x{NNNN} と一致させることができます。ここで、NNNN は文字の Hexa コードです。ICU ユーザーガイドを参照してください。

于 2014-04-12T08:06:37.637 に答える
0

すべての行がこれらの謎のスペースではなく\sに一致するスペースで終わっていることを見て、それらはおそらく非改行スペースです。合わせてみてください\0xA0

于 2013-07-31T22:45:45.100 に答える