正規化ルールのための正規表現

こんにちは、Lync/Skype サポートの吉野です。
今日は正規表現についてお話しします。

正規表現ってなに?

テキストを処理するためのパターンマッチングを指します。
Lync/Skype では .NET の表記に準拠しています。

https://msdn.microsoft.com/ja-jp/library/az24scfc(v=vs.110).aspx

何じゃこりゃ…だと思いますので、ここではLyncに特化した表記のみを解説していきます。
Lync で処理する文字列といえばもちろん、電話番号です。一般的には Lync が処理できるのは E.164 と言われる形式です。
たとえば +81312349876 このような表記になります。+から始まって国番号、市外局番、市内局番が続きます。
普段私が見慣れた電話番号の表記と言えば(03)1234-9876 や 03-1234-9876 だと思います。このような表記で Active Directory に電話番号が入っているかと思います。
Lync のためにいちいち書き直すのも大変ですし、そもそも一般のユーザーが +81312349876 のような表記を見ても電話番号と分かるかどうかも不安です。
というわけで、正規表現を使って正規化していきます。

Lync における正規化ルールでは「照合するパターン」を「変換ルール」にのっとって変換します。
ざっくりいうと、照合するパターンの ( ) のなかを変換ルールの $1,$2... に変換していきます。
( ) の数だけ $1,$2... があります。

例: 03-1234-**** という番号にかけたいとき、 **** だけ入力すればいいようにしたい。
照合するパターン   ^(\d{4}) $
変換ルール   +8131234$1

解説:照合するパターンを見ていきましょう。
まず ^ から始まって $ で終わります。これはそれぞれ開始・終了を示す記号です。
残るは (\d{4}) です。( ) は変換が適用される中身を示しています。この中身が変換ルールの $1 に置き換わります。
その中身ですが \d{4} です。 \d は整数を示しています。 {4} は4桁を意味しています。

つまり、4桁の整数が +8131234(その4桁の整数)に置き換わります。

03ではなく +813 に置き換えているのは、E.164形式に変更したためです。ハイフンは不要なので変換ルールでは省略しています。

では次の例を見ていきましょう。

例: 03-1234-5678 と入力した場合 +81312345678 に変換したい。
照合するパターン ^03-(\d{4})-(\d{4})$
変換ルール  +813$1$2

東京の局番を入れた場合ですね。東京の場合 03-(4桁)-(4桁)になるのでそのまま書いてみました。
( ) と $ の組み合わせは上記のように複数でも動作します。

では次の例です。

例:携帯電話への発信の変換ルールを作りたい。07012345678や09087654321
照合するパターン ^0(70|80|90)(\d{8})$
変換ルール +81$1$2

これは0から始まって次が70か80か90、つまり070か080か090の場合のルールですね。| は or になるのはプログラムではおなじみですね。

ということで電話番号に限ってしまえば正規化ルールはそんなにむずかしいものではありません。
問題は複数の正規化ルールを作成した場合どのルールが適用されるか?というところです。

もし、想定通りに動かない場合、どのルールで処理されているのか等を確認してみるのもいいかと思います。