正規表現で大弱り
あんまり良くない例ですが、仮に "ウェーブ かしらー!" なんていう、スペースを挟んだ非常に愛らしい文字列があったとします。愛らしいことにします。はい。
これを、.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());
■ 出力結果
ウェーブ
かしら〜!
んむよろしい! カナリー超かわいい!