プログラマーが正規表現を使いこなすメリットとは?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

引用元:https://egg.5ch.net/test/read.cgi/bizplus/1527843649/

3: 名無しさん。 2018/06/01(金) 18:09:26.74 ID:mG8AMAO8
覚えても使わないと忘れるんだよな
123: 名無しさん。 2018/06/01(金) 21:53:29.32 ID:ZSfmifiW
>>3
これ
188: 名無しさん。 2018/06/02(土) 09:23:12.46 ID:H2TG2QEq
>>3
全てにおいて言えるな。
分数の割り算が出来ない大学生が多いらしい。
120: 名無しさん。 2018/06/01(金) 21:49:45.01 ID:Q5gxvhRN
>>188
図書館の検索で正規表現?
前方一致、後方一致、あいまい検索くらいでいいんじゃない
5: 名無しさん。 2018/06/01(金) 18:13:10.82 ID:3oeH9VNN
言語によって書き方が違って覚えられない
50: 名無しさん。 2018/06/01(金) 19:48:59.91 ID:GZGaWPB7
>>5
ほんとそれ
特に最短一致はよく使うので
何とかして欲しい
6: 名無しさん。 2018/06/01(金) 18:13:22.06 ID:JRWDDTKe
否定先読み便利です
8: 名無しさん。 2018/06/01(金) 18:15:29.97 ID:siTtqKtM
1行のif文ってどうすればいいんや
10: 名無しさん。 2018/06/01(金) 18:20:11.05 ID:EH8m4JKz
>>8
改行しないでダラダラ書けばいいんじゃね
12: 名無しさん。 2018/06/01(金) 18:26:46.39 ID:SJYEv0u2
>>8
?
22: 名無しさん。 2018/06/01(金) 18:35:31.10 ID:aEQJ7tB/
>>8
環境と言語と目的は?
445: 名無しさん。 2018/08/07(火) 18:22:17.99 ID:afizN7Md
>>8
1行分だけならとか三項演算子あるけどなるべくやめとけ
iOSのサーバ証明書バグみたいになる
9: 名無しさん。 2018/06/01(金) 18:18:07.48 ID:vQTXve7T
都道府県と市区町村とその他に分けたやつは軽く感動したね
11: 名無しさん。 2018/06/01(金) 18:22:45.00 ID:YglpQtQm
頭の体操になる
13: 名無しさん。 2018/06/01(金) 18:27:59.00 ID:7EotE46N
そのうちAIが補正してくれるようになるよ
14: 名無しさん。 2018/06/01(金) 18:29:31.04 ID:/Nl7FBDG
はじめての性器表現
197: 名無しさん。 2018/06/02(土) 11:11:12.36 ID:iLaQ3bQ0
>>14
ちんこ!
16: 名無しさん。 2018/06/01(金) 18:30:47.70 ID:GiR86dnT
ある程度理解すると小回り効いて便利だ
ただそれは自分だけの世界ならではの話

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

20: 名無しさん。 2018/06/01(金) 18:33:16.42 ID:vQTXve7T
>>16
一週間前に自分で書いたやつが理解できないときあるもんな
85: 名無しさん。 2018/06/01(金) 21:07:12.65 ID:Q/QSEBNk
>>20
用途を添えて別のテキストへ蓄積
23: 名無しさん。 2018/06/01(金) 18:36:49.48 ID:aEQJ7tB/
>>16
ドキュメント作れよ。
68: 名無しさん。 2018/06/01(金) 20:43:51.97 ID:BHVkhBs1
>>16
正規表現そのものには、コメント入れられないからね
そこは不便
一致や置換の例でも、書いとくかね?
17: 名無しさん。 2018/06/01(金) 18:31:22.08 ID:L65m0R8i
必須やん

語尾に英字は全部消す
はくちっぽいので

18: 名無しさん。 2018/06/01(金) 18:31:40.72 ID:EPano/AU
姓企業元が使えない言語、環境ではもう仕事したくない
25: 名無しさん。 2018/06/01(金) 18:39:32.12 ID:37OepEDq
すぐ忘れてしまう
老いたな
26: 名無しさん。 2018/06/01(金) 18:40:59.69 ID:7WvaJvkL
パキュレーションサイトってこれで変換してるだけだろ
27: 名無しさん。 2018/06/01(金) 18:42:18.62 ID:d7k+iogF
簡単な正規表現だったら、誰でもできるだろ・・・

yy/MM/dd kk:mm:ss の日付の日だけ欲しいときに、いろいろ処理するのと
正規表現を使うのとでは、まあ確かに正規表現のほうがわかりやすそうではある
処理でやるのだと、” “でsplitして~とかやるんだろうなw

62: 名無しさん。 2018/06/01(金) 20:20:50.89 ID:h0zUYKxX
>>27程度なら普通に使ってるしsplitとかを駆使するより分かりやすいと思う
222: 名無しさん。 2018/06/02(土) 16:34:56.39 ID:TfY/zSoz
>>27
手入力だと文字が全角だったり、「HH:MM:SS」じゃなくて「H時M分」とか「H時」
だったり、区切り文字が「コロン(:)」が「セミコロン(;)」だったり、前後に空白文字
や、余分な改行文字(EXCELのセル入力あるある)が入っていたりとかフツーなんだが?
235: 名無しさん。 2018/06/02(土) 18:42:21.39 ID:rgFYA5v6
>>222
お前のところの「普通」なんて知らんがな
28: 名無しさん。 2018/06/01(金) 18:42:39.29 ID:LQnNkz1W
メンテの仕事は俺に回ってこないし、それで俺の給与が増えるとも思えない
本当にアドバンテージになるの?
43: 名無しさん。 2018/06/01(金) 19:23:27.90 ID:MHdkqr7I
>>28
今こそ転職じゃい
121: 名無しさん。 2018/06/01(金) 21:51:42.45 ID:N0fEdfYG
>>28
そういうことを聞いているレベルじゃ
お前さんの役には立たないよ
29: 名無しさん。 2018/06/01(金) 18:44:44.06 ID:fca26N9N
javascriptの配列処理を理解するのに1年かかった。
30: 名無しさん。 2018/06/01(金) 18:46:45.27 ID:q5e8P/AY
覚えてたけど忘れた
34: 名無しさん。 2018/06/01(金) 18:53:51.22 ID:r2+Rdi3U
正規表現で表現しきれないものまで無理に正規表現を使うな
71: 名無しさん。 2018/06/01(金) 20:46:49.31 ID:BHVkhBs1
>>34
これは鉄則だよね
96: 名無しさん。 2018/06/01(金) 21:16:40.81 ID:AS7EyvlG
>>34
RFCのメアドテストはギリギリだろうか?
346: 名無しさん。 2018/06/22(金) 05:29:33.72 ID:72JbRteZ
>>34
表現しきれないなら使えるわけないだろ
馬鹿か
お前が言いたいのは
式が複雑になりすぎる時は利用を断念することも検討しろ
という事だろ
簡単な日本語も使えない奴は何やっても駄目