将棋ポータルでは棋譜読み込みの処理に正規表現を使用しています。
対象としている棋譜は柿木形式で記載されているものです。

・よくある柿木形式
   1 7六歩(77)   ( 0:00/00:00:00)
柿木形式は現在、最も普及している棋譜の形式じゃないでしょうか?
棋譜でーたべーすの棋譜も、各タイトル戦の棋譜中継でも用いられています。
将棋倶楽部24も柿木形式です。

まず、手数、指し手、動かす駒、消費時間の順に記載されています。

これを正規表現で表してみたのが以下のものです。
・作成してみた正規表現
^(\n|\r|\s)*(?<move>\d?\d?\d?)\s*(((?<toX>[123456789])(?<toY>[一二三四五六七八九])|(?<equal>同)\s))(?<piece>成?[歩香桂銀金角飛王玉と馬竜])(?<opt>[成打]?)(\((?<fromX>\d)?(?<fromY>\d)\)|)\s*(\(\s*\d:\d\d/(?<time>\d\d:\d\d:\d\d)\)|)

それぞれ分解してみていきます。
1.手数
正規表現
(?<move>\d?\d?\d?)
柿木形式では、手数を1桁、2桁、3桁で表現されます。なので、0~9を表す\dを3つそれぞれあるかないか?をつけています。

ちなみに公式で最長手数は芹沢博文VS原田泰夫の390手らしいので3桁で問題ないはずです。

2.指手
正規表現
(((?<toX>[123456789])(?<toY>[一二三四五六七八九])|(?<equal>同)\s))(?<piece>成?[歩香桂銀金角飛王玉と馬竜])(?<opt>[成打]?)
指手は全角の数字、漢数字、駒、成る、打つのオプションで構成されています。
また、駒には成香、成桂、成銀等の駒の前に成がつく文字があります。

3.動かす駒
正規表現
(\((?<fromX>\d)?(?<fromY>\d)\)|)
動かす駒は()で挟まれた2桁の数値で表します。
正規表現では()の記号自体はグループの意味を持つため、\(\)と記述しなければいけません。

4.消費時間
正規表現
(\(\s*\d:\d\d/(?<time>\d\d:\d\d:\d\d)\)|)
消費時間はあったりなかったりが激しいですが一様読み取れるようにしています。


以上、柿木形式を読み取るために作成した正規表現でした。
きっともっといい記述があるかもしれませんが、参考までに載せておきます。
昨日、将棋ポータルの更新版を申請してきました。
早ければ一週間後にはストアで公開されるでしょう。

今回、対局と棋譜並べの処理に大きな変更を加えました。
ユーザからみれば特に変更点を感じることはないすが・・・。
これで角が消えるようなバグもなくなります(たぶん)

あと棋譜並べモードにはデータベースを使用するようにしました。
次あたりは保存していた棋譜を呼び出したりできるようにする予定です。

対局中のメニュー画面をメトロ風なデザインにしました。
メトロアイコンを作るのは楽しいです。

以下は次の更新で対応する予定の機能です。
  • 秒読みボイス(ソフトーク)
  • 駒画像変更(メトロ風将棋駒?)
  • 棋譜並べ履歴
さらに以下の機能を盛るこむことを考えています。
  • CPU対戦
  • 棋譜検索
  • 記録係モード
  • 将棋本DB
  • タイトル戦通知
もうちょっとポータルという名前にふさわしい機能を作っていきたいですね