.NET の正規表現で半角数字にマッチさせるには?
ネタ元はわんくま質問掲示板の No.50341 。
この記事の検証をしていて、ちょっと気になる動作が。
var str = @"1234567890あいうえお9876543210"; var result = Regex.Replace(str, @"\D", ""); Console.WriteLine(result);
を実行すると、
12345678909876543210
になります。(「 \d 」に全角数字がヒットしている)
上のコードは C# で書きましたが、 VB でやっても一緒です。
# .NET 3.5 SP1 で試した結果ですが、 .NET 4 RC でも動きは一緒だったので、恐らく .NET 4 RTM でも変わっていないハズ。
一方、 Perl 5.10.1 で同じ事をやると、
$str = '1234567890あいうえお9876543210'; $str =~ s/\D//g; print $str;
123459098643210
となります。(「 \d 」は全角の数字にはヒットしません)
そもそも PCRE としては、基本的に「 \d 」は「 IsDigit 」であり「 [0-9] 」と等価であるべきなはず。
こう云う独自拡張は不要な混乱を招くからやめて欲しいです。。。
……で結局、表題を実現したい場合、
var str = @"1234567890あいうえお9876543210"; var result = Regex.Replace(str, @"[^0-9]", ""); Console.WriteLine(result);
123459098643210
としないとダメ。
# ( 17:12 修正)なぜか str.Replace(str,...) とか書いていたので Regex.Replace(str,...) に修正。