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
30: 名刺は切らしておりまして 2018/06/01(金) 18:46:45.27 ID:q5e8P/AY
覚えてたけど忘れた
73: 名刺は切らしておりまして 2018/06/01(金) 20:51:19.39 ID:dbFqKXn3
>>1
正規表現使わないプログラマーとかっているの?
78: 名刺は切らしておりまして 2018/06/01(金) 20:58:44.36 ID:gwcTjZ0p
>>73
プログラム以外で正規表現って?
86: 名刺は切らしておりまして 2018/06/01(金) 21:07:57.21 ID:w2gZHW40
>>78
NGワード設定とか
90: 名刺は切らしておりまして 2018/06/01(金) 21:10:48.49 ID:FYIvMyBN
>>73
自分プログラマですが
むしろ正規表現に依存しすぎて
悩んでるぐらいやで…
122: 名刺は切らしておりまして 2018/06/01(金) 21:52:54.44 ID:+JrAK1Rt
>>1 <<< 豆 知 識 >>>
正規表現を初めて使用した実用的なアプリケーションは UNIX のエディタ qed (1960年代)。
143: 名刺は切らしておりまして 2018/06/01(金) 23:57:23.18 ID:mnyxvohL
>>1
メリットは英語の正規表現では長所、
美点の意味で利点と言う意味で英語を
使うならアドバンテージの方が正しい
145: 名刺は切らしておりまして 2018/06/02(土) 00:19:28.61 ID:ZZiZ4+ZA
>>1
読みやすさというのは違うと思う。
むしろパッと見で分からなくしてドヤ顔するためにあると思う。
146: 名刺は切らしておりまして 2018/06/02(土) 00:52:49.14 ID:WtS4UuIU
>>145
かつて、メモリ容量が少なかったり演算能力が低かった時代に効率的に処理するために生まれたものだと思ってる
今の御時世、こんな分かりづらい表記に頼る必要性はない
すでにあるツールを動かすために使うに留めるべき
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
ほんとそれ
特に最短一致はよく使うので
何とかして欲しい
11: 名刺は切らしておりまして 2018/06/01(金) 18:22:45.00 ID:YglpQtQm
頭の体操になる
13: 名刺は切らしておりまして 2018/06/01(金) 18:27:59.00 ID:7EotE46N
そのうちAIが補正してくれるようになるよ
24: 名刺は切らしておりまして 2018/06/01(金) 18:37:35.24 ID:rVEy9e7s
正規表現が役に立つのは、テキストエディタのみで不具合解析とかソースコード解析する時だな。
たまに統合開発環境すら入れさせてくれない現場で、サクラエディタとか秀丸を駆使して解析したわ。
69: 名刺は切らしておりまして 2018/06/01(金) 20:44:52.42 ID:BHVkhBs1
>>24
ファイル探すのに使わない?
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のメアドテストはギリギリだろうか?
46: 名刺は切らしておりまして 2018/06/01(金) 19:37:59.05 ID:ooETPHlN
俺が正規表現を覚えて絶望したことは
言語毎に正規表現が微妙に違うことに初めて気がついた時。
二つ目の言語やるまで、恥ずかしながら知らなかった。
47: 名刺は切らしておりまして 2018/06/01(金) 19:40:05.83 ID:DrSW68nt
>>46
あんまりにも複雑な表現は覚えても仕方ないし使い所ないよね?
VIの検索置換とか、そういうのを使うために覚えるのはありだが
簡単なものは覚えてると仕様書書くときとかにも使える
相手もある程度コーダーな人であるという前提になるが
下手な絵よりもわかりやすく誤解がないのがプログラム構文的な式を直書きすること
72: 名刺は切らしておりまして 2018/06/01(金) 20:49:10.59 ID:BHVkhBs1
>>46
極力、基本正規表現だけで表して、覚えることを
最小限にしてるよ。
52: 名刺は切らしておりまして 2018/06/01(金) 19:51:00.79 ID:q5e8P/AY
遠い記憶だと
意識して使い始める
↓
統一を意識するあまり一部が難解になる
↓
無理に統一する意味無くねと思い始める
↓
忙しいのに、やってられるかとちゃぶ台を返す
↓
記憶から消去
みたいな感じだったような...
簡単なやつは使えたはず
57: 名刺は切らしておりまして 2018/06/01(金) 19:56:04.01 ID:DrSW68nt
>>52
みんなそうだと思う
使うにしたって、PGを相手に実装されたような一部のツールで使うくらいだ
そのツールの一部有用な記述だけ習得して大多数は記憶から抹消するよ
コーディングにこんなもん本格的に使ったら引き継いだやつが泣きを見るし
UIで正規表現前提のもの作ったら客からクレームが来る
54: 名刺は切らしておりまして 2018/06/01(金) 19:52:36.62 ID:5a/qFLwK
正規表現での検索だけを使ってるうちはさほどでもないけど、
キャプチャして置換を覚えて便利に使うようになると
他の人(未来の自分を含む)に読めない式を量産しちゃうので要注意。
正規表現を組み立てるパズルが面白すぎるんだわ。
55: 名刺は切らしておりまして 2018/06/01(金) 19:53:59.14 ID:I4i42Rhm
ボケ防止
63: 名刺は切らしておりまして 2018/06/01(金) 20:22:05.11 ID:pm+ptodW
素人さん辺りからそんけーの目で見られる
64: 名刺は切らしておりまして 2018/06/01(金) 20:30:19.67 ID:Eb9AVo6L
働き方改革
昔はファイル名を手作業でひとつずつ変更していたものを一瞬で変換できる
157: 名刺は切らしておりまして 2018/06/02(土) 02:39:33.05 ID:o3ppuK5b
>>64
余計なことするなよー、仕事が増えるじゃん
65: 名刺は切らしておりまして 2018/06/01(金) 20:31:34.99 ID:evgGcoLn
正規表現はプログラム書くなら常識中の常識でしょ
個人的にはそれよりも
ちゃんとした擬似言語を書けるようになりたい
76: 名刺は切らしておりまして 2018/06/01(金) 20:56:00.48 ID:Q5gxvhRN
単純なのものは便利だけど長くなるとメンテできない
83: 名刺は切らしておりまして 2018/06/01(金) 21:06:01.51 ID:Q5gxvhRN
通常言語の記述が複雑になりすぎるとき以外は使わない
メンテを考えるとほかの人に渡しにくいから
84: 名刺は切らしておりまして 2018/06/01(金) 21:06:45.18 ID:GozHDCGl
絶対にメンテしたくない。。。
88: 名刺は切らしておりまして 2018/06/01(金) 21:08:48.80 ID:FYIvMyBN
無いと仕事にならん
97: 名刺は切らしておりまして 2018/06/01(金) 21:17:05.68 ID:Q5gxvhRN
現状の正規表現を機械語としたときの高級言語が欲しいよね
111: 名刺は切らしておりまして 2018/06/01(金) 21:36:50.33 ID:f9zQvCc8
長い難解な正規表現を1行書く事が「俺ってカッコイイ」というおかしな風潮があるよね
そんな事しないで、論理的な単位で分割して、わかりやすい変数名で文字列を定義して、最後に連結してコンパイルする
とかしてくれればいいのにねー
もちろん、コンパイルは遅いので、最初の1回だけで済むようにしたいけど
113: 名刺は切らしておりまして 2018/06/01(金) 21:41:25.76 ID:Q5gxvhRN
>>111
個人でやっている分にはそれでもかまわないんだけどね
企業ベースだと、正当性の検査、メンテナンスチームへの引継ぎ、等々
あと、個人ベースでも時間がたって見直すと、あれ何やってたっけとか
117: 名刺は切らしておりまして 2018/06/01(金) 21:44:54.82 ID:l9A8ePwy
>>111
この種の問題全般に言えることだけど
やってる当人は必要にかられてやってることでも、周辺の人間が異様にバイアスの掛かった視線で見てることって多いな
118: 名刺は切らしておりまして 2018/06/01(金) 21:47:45.47 ID:mEoQ89aV
でも正規表現使えない検索ボックスであああああってなる
地元図書館の蔵書検索とか
119: 名刺は切らしておりまして 2018/06/01(金) 21:49:24.59 ID:/tKMxoIa
正規表現を日本語(話し言葉)への翻訳とその逆は文系に必須の能力
124: 名刺は切らしておりまして 2018/06/01(金) 21:55:57.95 ID:f9zQvCc8
複数行マッチの正規表現で、プロジェクト全体の規則性のある大量の修正を一発で終えた時の、あの爽快感は病みつきですね~
127: 名刺は切らしておりまして 2018/06/01(金) 21:58:30.63 ID:Q5gxvhRN
>>124
規則性のあるものはまとめたほうがよかったのにね
すでにあるプロジェクトだから仕方ないけど
129: 名刺は切らしておりまして 2018/06/01(金) 22:03:30.49 ID:f9zQvCc8
>>127
たしかにそういうケースもある
もともとコピペで増殖して今更大人の事情で直せない奴の一括修正とか
でもそういうケースばかりじゃないね(そう多くはないけど)
130: 名刺は切らしておりまして 2018/06/01(金) 22:06:37.05 ID:Q5gxvhRN
>>129
業務系の連中はプログラムをコピーして一部修正ばっかりやってる
後のことなんて考えてない
126: 名刺は切らしておりまして 2018/06/01(金) 21:57:31.58 ID:08OlaRqX
作ったアプリを、一生管理する気なら、好きなようにやったらいいけど
自分が作った物を、後の人が拡張したりする可能性があるのであれば
他の人が見ても分かるような形にしとかんとダメじゃね?
138: 名刺は切らしておりまして 2018/06/01(金) 22:22:49.88 ID:eUthWqgT
正規表現辞典? 知らね
詳説正規表現なら知ってる
158: 名刺は切らしておりまして 2018/06/02(土) 02:54:46.05 ID:WSfc4a1A
素人質問ですまんけど、正規表現って、ワイルドカードのこと?
161: 名刺は切らしておりまして 2018/06/02(土) 03:31:50.40 ID:I7WXyjeV
>>158
重要な要素の一つだね
194: 名刺は切らしておりまして 2018/06/02(土) 10:56:26.27 ID:KSmjx9C4
>>158
ワイルドカードの超高級版だよ
164: 名刺は切らしておりまして 2018/06/02(土) 03:45:06.93 ID:q9L5zqSv
シェルのグロブで正規表現並に細かく指定したいときがたまにある
自分はもう手癖のように使えるけど、Linux初心者はこの両者の違いを理解するのに苦労しそう
そもそも両者はなんで統一されてねーんだよって思ったり
165: 名刺は切らしておりまして 2018/06/02(土) 03:45:15.55 ID:OxIZQKNg
長年手入れしてきたNGExのデータを失った時には泣けた。
169: 名刺は切らしておりまして 2018/06/02(土) 07:32:42.37 ID:inUmnvMj
C言語は正規表現がウンコなのどうにかならんのか
179: 名刺は切らしておりまして 2018/06/02(土) 08:37:08.94 ID:rgFYA5v6
>>169
そもそも文字列操作が不得意な言語になに期待してるんだよ
171: 名刺は切らしておりまして 2018/06/02(土) 07:48:07.97 ID:TbiNxClw
昔は(昔から正規表現あったようだけど)、
右から何文字目とか、左から何文字目とかやって
数値だったら~、とか、空白だったら~、とか
ゴチャゴチャやってたけど、
超めんどくさい。
基本的に正規表現使うようにしてるけど、その分昔より頭使わなくなった感はある。
173: 名刺は切らしておりまして 2018/06/02(土) 08:00:22.05 ID:sCFOm73J
Google検索がもっと正規表現を受け付けてくれたらなあ。
175: 名刺は切らしておりまして 2018/06/02(土) 08:03:52.69 ID:svbbVFc4
確かにネット検索で、表記のゆらぎをまったく許容しないで
俺が書いたそのままの条件での結果を表示してくれ、と思うことあるな。
184: 名刺は切らしておりまして 2018/06/02(土) 09:04:55.45 ID:jTGi+IMN
プログラマーを非正規雇用で使いこなすメリットは?
に見えたorz…
189: 名刺は切らしておりまして 2018/06/02(土) 09:56:34.73 ID:Gm4CfMWb
正規表現使えないで、プログラマを名乗る奴がいることに驚くわ。
一括変換とかどうやっているんだろう?
191: 名刺は切らしておりまして 2018/06/02(土) 10:18:45.41 ID:WtS4UuIU
>>190
サーバ上でコーディングとかどこの日曜プログラマなんだ?
それともサーバとWSの区別が付いてないアホ?
192: 名刺は切らしておりまして 2018/06/02(土) 10:45:15.70 ID:YfvaDbIN
>>191
ライセンス一個しかなきゃ、サーバーにリモートアクセスして編集するじゃん
202: 名刺は切らしておりまして 2018/06/02(土) 11:21:03.68 ID:u4uJIPzl
>>191
サーバ上のスクリプトの調整が主要業務の人たちにあやまっとけよw
198: 名刺は切らしておりまして 2018/06/02(土) 11:11:33.02 ID:J8G5crVc
漢字もハングルも使えないじゃないか
199: 名刺は切らしておりまして 2018/06/02(土) 11:13:35.50 ID:HL64GqQg
>佐藤:勤務先はいわゆるSIerですので
マニュアル作って人月で生きるゴミにデスマーチさせる人たちか
200: 名刺は切らしておりまして 2018/06/02(土) 11:15:51.11 ID:8yE3VBS6
とりあえず正規表現すら使えない低能はさっさと解雇しとけば間違いない
205: 名刺は切らしておりまして 2018/06/02(土) 11:42:39.97 ID:gwsgG2tp
テキストマイニングで正規表現は重宝している
207: 名刺は切らしておりまして 2018/06/02(土) 12:25:30.78 ID:WtS4UuIU
例外的に実機のメンテナンスをやるところなら
確かに、ネットワークを止めて実機でテストスクリプト走らせるとかはあるだろうけどさ
208: 名刺は切らしておりまして 2018/06/02(土) 12:49:28.56 ID:TSKo4UPK
てかどこからコーディングなんて出てきたんだよ w
209: 名刺は切らしておりまして 2018/06/02(土) 12:59:24.31 ID:zNTsDGED
自分の書いたものだと分かるけど、
他人の書いた正規表現とか単なる暗号文に見えるわ。
でも自分の書いたものでも、しばらくたつとチンプンカンプンで
何でこんな事を書いたんだろう?って思えるものがある
213: 名刺は切らしておりまして 2018/06/02(土) 14:04:28.30 ID:1oThqnVI
メリットも何も正規表現なんて環境の一部だろ
様々な用途で毎日使ってるが
215: 名刺は切らしておりまして 2018/06/02(土) 14:11:34.59 ID:8TIiSv5W
正規表現は馬鹿には使いこなせない
228: 名刺は切らしておりまして 2018/06/02(土) 17:24:07.23 ID:g8RukKVH
正規表現何て情報処理技術者が知っている技術の何百分の一のレベルじゃないか、其れを大袈裟に書く時点でライターのレベルが分かる
237: 名刺は切らしておりまして 2018/06/02(土) 18:59:06.48 ID:j+bjgE1B
全角の数字だけ半角にするとか、「半角カナ」を「全角カナ」に変えて、「半角カナ文字+濁点」や
「半角カナ文字+半濁点」は、濁点や半濁点付きの全角1文字へ変換みたいなことをしようと
すると、excelのvbaマクロでも書いた方がはやい。 プロジェクト内のソースコードで、変数名や
関数名を変えるなら、Visual Studioのリファクタリング機能を使った方が確実で速い。
243: 名刺は切らしておりまして 2018/06/02(土) 21:22:41.87 ID:5VYx/ePs
正規表現なかったら文字列の抽出とか置き換えとかif文の嵐になるだろ
244: 名刺は切らしておりまして 2018/06/02(土) 21:57:40.64 ID:UrYXEsiD
今更正規表現ってw
何十年前の技術だと思ってるんだ
248: 名刺は切らしておりまして 2018/06/03(日) 16:31:25.67 ID:ldRJPttT
>>244
正規表現を使わないの?
253: 名刺は切らしておりまして 2018/06/03(日) 17:58:06.95 ID:052mca8r
>>248
プログラマなら使えて当然かと思ってた
時期的に、新入社員用の記事かな
247: 名刺は切らしておりまして 2018/06/02(土) 23:06:53.29 ID:TfY/zSoz
ロクにコメントを書かないようなヤツが、まともな例外処理や、関数の戻り値で
エラー判定処理を書いているとは思えんな。
259: 名刺は切らしておりまして 2018/06/04(月) 00:23:10.45 ID:VKmaujku
プログラマより運用かな。ログ解析で日常的に使う。
プログラマだと使わない使えない人を見かける。ごく一部にちょろっと使うだけだからな。
263: 名刺は切らしておりまして 2018/06/04(月) 12:32:48.64 ID:BjiPNdCM
>>259
プログラマだけど、ログから不具合の原因調査とかで正規表現は日常的に使う。
25: 名刺は切らしておりまして 2018/06/01(金) 18:39:32.12 ID:37OepEDq
すぐ忘れてしまう
老いたな
この記事へのコメントはありません。