X
    Categories: 企業・業界

【企業・業界】【IT】プログラマーが正規表現を使いこなすメリットとは?

1 :マネロビ! 2018/06/01(金) 18:00:49 CAP_USER
皆さん、正規表現は使っていますか? 開発者にとってテキスト処理は面倒な場面も多いですが、正規表現を駆使することで一気に効率化することもできます。今回、『正規表現辞典 改訂新版』の著者・佐藤竜一さんに、正規表現を使うメリットや本書についてうかがいました。

――『正規表現辞典 改訂新版』は目的別の検索ができるリファレンスですが、正規表現の歴史や背景についても解説されています。今回は佐藤さんに本書についてお尋ねしますが、まずはご自身のことを教えてください。

佐藤:勤務先はいわゆるSIerですので、各種システムの企画・構築を主業務としています。主に担当しているのは企業向けのアプリケーション開発基盤の構築や、個別システムに対するアプリケーション・アーキテクチャの立案といった分野ですね。

 世間的には「アーキテクト」と呼ばれる職種になりますが、私自身はプログラマーとして個別の問題と向き合い、頭を絞るほうが好きです。

――仕事では正規表現をどう活用されているのでしょうか。

佐藤:個別のアプリケーションにおける入力値検証などに利用することはもちろん、アプリケーションやミドルウェアのトラブルシュートにおけるログの分析や、既存データのクレンジングなどに活用しています。

 ログ分析では必要なログのみを抜き出す、あるいは不要な部分を刈り取るために正規表現は欠かせません。データのクレンジングでは不要なデータを排除する、あるいは不正なデータを正しい形式に整形するといった作業が必要となりますが、このような局面でも正規表現はそのパワーを存分に発揮してくれます。

読みやすさやメンテナンスのしやすさで差がつく
――プログラマー(開発者)として、正規表現を使いこなすのと使いこなさないのとでは、どんな差がつきますか?

佐藤:テキストを相手にする処理では、正規表現を活用することで簡潔かつ分かりやすい記述が可能となるケースが多々あります。正規表現をうまく使えないプログラマーは、ちょっとした処理でもループでテキストを文字単位に分割し、複雑な条件分岐を処理中に記述してしまいます。

 このようなプログラムは確かに動作するかもしれませんが、読みやすさやメンテナンスのしやすさという観点で見れば大きなマイナスとなるでしょう。

「正規表現を使いこなす」という質問からすると拍子抜けされるかもしれませんが、正規表現を使って解決すべき現場の問題の多くは、基本正規表現と拡張正規表現の範囲でも十分まかなえます。

 ですので、本当に基本的な部分をちゃんと理解するだけでもプログラマーとしては大きなアドバンテージになります。大切なのは個々のメタキャラクタの意味をきちんと押さえること、そして実践を繰り返すことでしょう。最初はとっつきにくく見える正規表現も、慣れてくるうちに自然と記述できるようになります。

――開発者以外でも正規表現を使えることでどのような利点がありますか?

佐藤:現在は開発者以外の方でも、各種のクラウドサービスなどのツールやリソースを活用して生産性の向上、さらにはビジネス上の成果を求められる時代です。処理対象の指示や結果の加工に正規表現が必要とされる、あるいは正規表現を使うことでより柔軟な処理を実現できるといった局面は今後も増えてくるはずです。

 たとえば、RPA(Robotic Process Automation)ではExcelやPDFファイルから特定のデータのみを抜き出し、妥当性を判断し、加工したうえで最終的な結果を得るといったことが普通に行われます。このような処理は、それこそ正規表現が最も得意とする領域です。

結果に辿りつく過程を理解してほしい
――2005年に出版された初版と、この改訂版が出る間に、どのような変化がありましたか?

佐藤:本書の前書きにも書きましたが、Unicodeが文字コードの標準的地位を獲得したことです。文字の選択はUnicodeのプロパティにもとづいて行われるため、たとえば1文字の数字を表す「¥d」はUS-ASCII以外の数字にもマッチすることが当然になりつつあります。

 また、絵文字のように複数のコードポイントを消費して目に見える1文字を表すケースもこれまで以上に増えました。本書でも可能な限り、これらのポイントについて説明しています。
https://codezine.jp/article/detail/10855

3 :マネロビ! 2018/06/01(金) 18:09:26 mG8AMAO8
覚えても使わないと忘れるんだよな
123 :マネロビ! 2018/06/01(金) 21:53:29 ZSfmifiW
>>3
これ
4 :マネロビ! 2018/06/01(金) 18:12:51 vQTXve7T
5ちゃんのNGに便利
5 :マネロビ! 2018/06/01(金) 18:13:10 3oeH9VNN
言語によって書き方が違って覚えられない
50 :マネロビ! 2018/06/01(金) 19:48:59 GZGaWPB7
>>5
ほんとそれ
特に最短一致はよく使うので
何とかして欲しい
6 :マネロビ! 2018/06/01(金) 18:13:22 JRWDDTKe
否定先読み便利です
9 :マネロビ! 2018/06/01(金) 18:18:07 vQTXve7T
都道府県と市区町村とその他に分けたやつは軽く感動したね
11 :マネロビ! 2018/06/01(金) 18:22:45 YglpQtQm
頭の体操になる
13 :マネロビ! 2018/06/01(金) 18:27:59 7EotE46N
そのうちAIが補正してくれるようになるよ
16 :マネロビ! 2018/06/01(金) 18:30:47 GiR86dnT
ある程度理解すると小回り効いて便利だ
ただそれは自分だけの世界ならではの話

他人が書いた正規表現はメンテの時に混乱する
特に一行で収めようと頑張ってる人が書いた正規表現は鬼門

20 :マネロビ! 2018/06/01(金) 18:33:16 vQTXve7T
>>16
一週間前に自分で書いたやつが理解できないときあるもんな
68 :マネロビ! 2018/06/01(金) 20:43:51 BHVkhBs1
>>16
正規表現そのものには、コメント入れられないからね
そこは不便
一致や置換の例でも、書いとくかね?
24 :マネロビ! 2018/06/01(金) 18:37:35 rVEy9e7s
正規表現が役に立つのは、テキストエディタのみで不具合解析とかソースコード解析する時だな。
たまに統合開発環境すら入れさせてくれない現場で、サクラエディタとか秀丸を駆使して解析したわ。
69 :マネロビ! 2018/06/01(金) 20:44:52 BHVkhBs1
>>24
ファイル探すのに使わない?
34 :マネロビ! 2018/06/01(金) 18:53:51 r2+Rdi3U
正規表現で表現しきれないものまで無理に正規表現を使うな
71 :マネロビ! 2018/06/01(金) 20:46:49 BHVkhBs1
>>34
これは鉄則だよね
38 :マネロビ! 2018/06/01(金) 19:07:00 qprJtppj
英会話と同じで、使わなければドンドン忘れて行く
46 :マネロビ! 2018/06/01(金) 19:37:59 ooETPHlN
俺が正規表現を覚えて絶望したことは
言語毎に正規表現が微妙に違うことに初めて気がついた時。
二つ目の言語やるまで、恥ずかしながら知らなかった。
47 :マネロビ! 2018/06/01(金) 19:40:05 DrSW68nt
>>46
あんまりにも複雑な表現は覚えても仕方ないし使い所ないよね?
VIの検索置換とか、そういうのを使うために覚えるのはありだが
簡単なものは覚えてると仕様書書くときとかにも使える
相手もある程度コーダーな人であるという前提になるが
下手な絵よりもわかりやすく誤解がないのがプログラム構文的な式を直書きすること
72 :マネロビ! 2018/06/01(金) 20:49:10 BHVkhBs1
>>46
極力、基本正規表現だけで表して、覚えることを
最小限にしてるよ。
160 :マネロビ! 2018/06/02(土) 03:02:55 izp8kVtx
俺はあれだ、毎回マイクロソフトのページに頼ってる。
163 :マネロビ! 2018/06/02(土) 03:35:11 NlkyhSYB
>>160
ググると一番上にでてくんだよなw
165 :マネロビ! 2018/06/02(土) 03:45:15 OxIZQKNg
長年手入れしてきたNGExのデータを失った時には泣けた。
173 :マネロビ! 2018/06/02(土) 08:00:22 sCFOm73J
Google検索がもっと正規表現を受け付けてくれたらなあ。
205 :マネロビ! 2018/06/02(土) 11:42:39 gwsgG2tp
テキストマイニングで正規表現は重宝している
209 :マネロビ! 2018/06/02(土) 12:59:24 zNTsDGED
自分の書いたものだと分かるけど、
他人の書いた正規表現とか単なる暗号文に見えるわ。
でも自分の書いたものでも、しばらくたつとチンプンカンプンで
何でこんな事を書いたんだろう?って思えるものがある
230 :マネロビ! 2018/06/02(土) 17:58:04 8yVZbT3C
むかし自分が書いた正規表現ですら1年後にみると何かいてあるのかわからんからなw
あれこそコメントを残すべきもの

//カウント値をインクリメントする
i++

とかのコメントを書くよりよっぽど重要ヽ(´ー`)ノ

232 :マネロビ! 2018/06/02(土) 18:28:07 79t+WG3q
>>230
コメントつけないとわからないようなソース書いちゃダメ
って昔言われた
251 :マネロビ! 2018/06/03(日) 16:55:25 k9M59bDq
最初は行先頭、最後ぐらい知っとけばいい
omorovie: