ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

より柔軟にデータストアを検索できるよう正規表現を覚えましょう

f:id:mbaasdevrel:20180913163950p:plain

あまり知られていないのですが、NCMBのデータストアでは正規表現を使った検索ができます。正規表現を使うことで、単純な文字列一致だけでなく、前後一致や一部一致などもできるようになります。簡易的な検索に使えるでしょう。

しかし正規表現はプログラマーにとっても難儀することがあります。今回は簡単な正規表現なら書けるように、解説します。

正規表現が使えるのは文字列型のみ

正規表現は文字列に対してのみ使えます。数値、配列、真偽値など、文字列以外の型には使えませんのでご注意ください。

正規表現の解説

ではここからよく使われる正規表現について紹介します。

何でもいいので一文字

数字でも文字でも何でもいいので一文字という場合には . を使います。

abcdeabgde という文字に対して ab.de は一致していると見なされます。

繰り返し

*を使うと、その前にある文字を0回以上繰り返している場合に指定できます。

abcdeabccccdeab.*de に対して一致と見なされます。

1回以上の繰り返しとしたい場合には + を使います。ab.+de のような具合です。繰り返す回数を指定する場合には {} を使います。2回の場合は {2} のようにし、3回以上4回までとする場合は {3,4} とします。もしよくある 000-0000-000000-0000-0000 という電話番号の形式を考えるならば、 [0-9]{2,3}-[0-9]{3,4}-[0-9]{4} といった形になるでしょう。

最初の一致時点で終了する

*は便利ですが、条件が一致する最後の場所まで移動してしまいます。

abcde abcde という文字に対して ab.*de とすると、 abcde abcde 全体にマッチします。 ab.*de ab.* とするとマッチしていないと見られてしまいます。最初の .* の時点で一番最後まで文字をスキャンしてしまっているからです。

そこで .*? とはてなを使うと、最初の一致時点でスキャンを終了します。 ab.*?de ab.* は一致と見なせるようになります。

文字の最初、最後として指定する

文字の最初であることを指定する場合には \A を使います。似たような表現として行頭を意味する ^ もあります。これは改行が入った場合に区別されます。同様に \Z は文字の最後、$ 行末として指定します。

\A\Z はメタ文字といわれます。他にも \s でスペース、 \w で何か一文字といったメタ文字もよく使われます。ただし \A\Z が使えない環境も多いので注意してください。

英数文字を指定する

文字を幾つか範囲で指定したい場合には [] を使います。よくあるのは英数文字を指定する場合に使う [a-zA-Z0-9] という表現です。逆に省きたい時には [^0-9] のように ^ を付けます。他にも数値を指定する場合には [0-9] になります。

文字列をor条件で指定する場合には (apple|grape|banana) のように確固と | を使って区切ります。

オプションはNCMBでは使えません

m/s/g/iといったオプション(大文字、小文字を無視する、改行の扱いを指定するなど)はNCMBでは使えませんので注意してください。

正規表現をテストする場合には

正規表現をテストしたい場合には正規表現チェッカー | WEB ARCH LABOなどが便利です。

まとめ

正規表現を使いこなすことで、より柔軟に文字列を検索できるようになります。ただ、いきなり複雑なものを書くと、うまく動かなかった時の修正が大変になります。なるべく簡単なものから書いていき、検索結果が望んだものになっているかを確認しながら進めるのがお勧めです。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。