正規表現で大弱り

あんまり良くない例ですが、仮に "ウェーブ かしらー!" なんていう、スペースを挟んだ非常に愛らしい文字列があったとします。愛らしいことにします。はい。

これを、.Netの正規表現でスペースを利用して分けて表示したいなんて思ったとしましょう。私は、次のようなコードを書いたわけです。

// "文字+ space 文字+" を探して欲しいの〜
Regex r = new Regex(@"(\w+) (\w+)");
Match m = r.Match("ウェーブ かしら〜!");

System.Console.WriteLine(m.Groups[1].ToString());
System.Console.WriteLine(m.Groups[2].ToString());

■ 出力結果

かしら

なんだと…!?



なんでやねん! 「"表示可能な文字が1文字以上" + "スペース" + "表示可能な略"」 が探せてないやん! なんでやねん! なんや?またMicros●ftお得意の「仕様です」が着たちゅーことかぁー!?

とか思ったんですが、結論としては私がアホでした。

(\wは)'[A-Za-z0-9_]' と同じ意味です。

http://msdn2.microsoft.com/ja-jp/library/20bw873z(VS.80).aspx


日本語は対象外だコレー!?


……ちくしょう誰のせいでこんなことに……




んでまぁ、こういう英語圏以外の文字列が入っているホワイトスペース区切り文字列を処理するときは、次のようにすると良さげのようです。

// \S (大文字) を利用して「スペース以外」を検索する。
Regex r = new Regex(@"(\S+) (\S+)");
Match m = r.Match("ウェーブ かしら〜!");
System.Console.WriteLine(m.Groups[1].ToString());
System.Console.WriteLine(m.Groups[2].ToString());

■ 出力結果
ウェーブ
かしら〜!

んむよろしい! カナリー超かわいい!