Xamarin逆引きTips
コードを書く前に正規表現をテストするには?(.NET/Xamarin対応)
.NET/Monoの基本クラスライブラリを使って正規表現を書く場合、そのテストはどうする? Xamarin Studioの正規表現ツールキットを使って手軽に行う方法を紹介。
C#言語などで正規表現(Regular Expression)を書く場合、実際のプログラムに実装する前に、その正規表現が正常に動作するか、チェックする場合が多いだろう。その際、正規表現テスト用のコンソールアプリを作成したり、オンライン上の正規表現テスターサービスを使ったりすることもあるだろう。こういった用途で、筆者が特にお勧めしたいのが、Xamarin Studioに同梱されている正規表現ツールキットである。Visual Studioユーザーで「Xamarin Studioは使わない」という人も、取りあえずこのツールキットを使うために、Xamarin Studioを入れておくと便利だ(実際に筆者はVisual Studioで開発中のときも、正規表現チェックのためにXamarin Studioを活用している)。
正規表現ツールキット
このツールキットを使えば、.NET/MonoのRegex
クラス(System.Text.RegularExpressions名前空間)が提供する正規表現機能の実行と結果を手軽に検証できる。実際に利用するには、Xamarin Studioのメニューバーから[ツール]-[正規表現ツールキット]を選択するだけだ。これにより図1のような画面が表示される。
Regexクラスによる正規表現を実行して、その結果を確認できる。
- 1[Regular Expression]: 正規表現のパターンを入力する。
- 2[Options]: 正規表現のオプションを指定する。詳細後述。
- 3[Input]: 検証対象のテキストを入力する。
- 4[置換]: マッチさせるだけでなく、置換をしたい場合にチェックを入れ、その下にあるテキストボックスに置換後のテキストを入力する。
- 5[Expand matches]: 7の[マッチ]タブで、結果ツリーを展開した状態で出力したい場合にチェックを付ける。付けないとツリーが折り畳まれた状態で出力される。
- 6[Start Regular Expression]: 正規表現を実行するためのボタン。
- 7[マッチ]タブ: 正規表現でマッチした結果がツリー形式で表示される。
- 7[置換]タブ: 正規表現で置換した後のテキストが表示される。
特に難しいことはないので、図1の説明だけで十分に使いこなせるだろう(よって使い方に関する詳細な説明は割愛する)。
正規表現の構文リファレンス
「正規表現を日常的に書かないので詳しい構文は覚えていない」「正規表現はリファレンスを見ながら作成する」という人は少なくないだろう。例えば筆者の場合は、(.*?)
という「任意の1文字(.)が0回以上マッチしてリピートが最小限となる(*?)のをグループ化する」正規表現をよく使うので、これだけ覚えておき、他は正規表現を実装するときにリファレンスを参照している。
正規表現ツールキットには、正規表現リファレンスも用意されており、画面上から手軽に参照できる。具体的には、図2のように画面下部にある[要素]タブをクリックするだけだ。
ちなみに、オンラインで参照したい場合や、正規表現自体を詳しく学びたい場合は、次のMSDNページを参照するとよい。
正規表現のオプション
前述の図1-2で指定できる各種オプションは、RegexOptions
列挙体(System.Text.RegularExpressions名前空間)の値と(ほぼ)一致している。その内容を、参考までに表にまとめた(※既定の動作では、これらのオプションは全てオフになっている)。
オプション名 | RegexOptionsメンバー名 | 機能内容 |
---|---|---|
空白を無視 | IgnorePatternWhitespace | 正規表現のパターンから、エスケープされていない空白を削除する。また、# より後ろ(=コメント)を無視する |
大文字小文字を区別しない | IgnoreCase | 検索時に大文字と小文字を区別しない |
単一行 | Singleline | 単一行モードを指定する。. 要素(=改行文字以外の任意の1文字)の意味解釈が変わり、\n (改行文字)を含む全ての文字が任意の1文字としてマッチするようになる(※つまり改行があってもマッチするようになるということ。通常モードでは改行文字が含まれているとマッチしない) |
複数行 | Multiline | 複数行モードを指定する。^ 要素(=「入力テキスト全体の先頭」を意味する)と$ 要素(=「入力テキスト全体の末尾」を意味する)の意味解釈が変わり、それぞれ「行頭」と「行末」に一致するようになる |
明示的なキャプチャ | ExplicitCapture | (?<名前や番号>……) のように明示的に指定した名前/番号付きのグループだけが有効なキャプチャ対象であることを指定する。(……) のような名前なしグループや(?:……) のように名前を明示的に省略した非キャプチャグループはキャプチャされなくなる(=正規表現にマッチする内容でも、取得されなくなったり、置換されなくなったりする) |
右から左 | RightToLeft | 検索が「右から左」に行われる。日本語や英語など大半の言語は「右から左」なので、これを指定する機会はほとんどないだろう(ちなみにアラビア語などが右から左に文章を書く) |
チェックボックスをチェックしてボタンを押すだけで挙動を変えられるので便利だ。正規表現のパターンが完成して、そこで使ったオプションをコードに反映する場合に、オプション名→RegexOptionsメンバー名に置き換える必要があるが、日本語→英語で素直に置き換えづらいのが弱点だ。そんなときに、上記の表を参考にしてほしい。
※以下では、本稿の前後を合わせて5回分(第52回~第56回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
52. Xamarin.FormsでTwitterクライアントを作成するには?
TwitterのAPIを扱えるライブラリであるCoreTweetを使用して、Twitterデータを検索するアプリを作成。CoreTweetの導入と、検索したテキストの表示までを紹介する。
53. MvvmCrossでWebBrowserプラグインを使用するには?
WebBrowserプラグインを追加・利用する例を通じて、MvvmCrossでのiOS/Androidアプリ開発におけるMvvmCrossプラグインの基本的な使い方を説明する。
54. 【現在、表示中】≫ コードを書く前に正規表現をテストするには?(.NET/Xamarin対応)
.NET/Monoの基本クラスライブラリを使って正規表現を書く場合、そのテストはどうする? Xamarin Studioの正規表現ツールキットを使って手軽に行う方法を紹介。
55. MvvmCrossでカスタムコントロールをTwo-Wayバインディングに対応させるには?
MvvmCrossでのiOS/Androidアプリ開発において、カスタムビュークラスをTwo-Wayバインディングに対応させる方法を解説する。
56. Xamarin.FormsでAzureモバイルサービスによるToDoアプリを作成するには?
ひな型プロジェクトが用意されているXamarin.iOSやXamarin.Androidではなく、Xamarin.FormsからAzureモバイルサービスを活用する基本的な方法を、簡単なToDoアプリを題材に解説する。