X



【IT】プログラマーが正規表現を使いこなすメリットとは?
■ このスレッドは過去ログ倉庫に格納されています
0001ノチラ ★
垢版 |
2018/06/01(金) 18:00:49.92ID:CAP_USER
皆さん、正規表現は使っていますか? 開発者にとってテキスト処理は面倒な場面も多いですが、正規表現を駆使することで一気に効率化することもできます。今回、『正規表現辞典 改訂新版』の著者・佐藤竜一さんに、正規表現を使うメリットや本書についてうかがいました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 また、絵文字のように複数のコードポイントを消費して目に見える1文字を表すケースもこれまで以上に増えました。本書でも可能な限り、これらのポイントについて説明しています。
https://codezine.jp/article/detail/10855
0002名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:02:50.04ID:UW8cROsO
.
0004名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:12:51.60ID:vQTXve7T
5ちゃんのNGに便利
0005名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:13:10.82ID:3oeH9VNN
言語によって書き方が違って覚えられない
0006名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:13:22.06ID:JRWDDTKe
否定先読み便利です
0007名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:14:16.77ID:E4cvvVe6
(?!.*)
0009名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:18:07.48ID:vQTXve7T
都道府県と市区町村とその他に分けたやつは軽く感動したね
0012名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:26:46.39ID:SJYEv0u2
>>8
?
0014名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:29:31.04ID:/Nl7FBDG
はじめての性器表現
0016名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:30:47.70ID:GiR86dnT
ある程度理解すると小回り効いて便利だ
ただそれは自分だけの世界ならではの話

他人が書いた正規表現はメンテの時に混乱する
特に一行で収めようと頑張ってる人が書いた正規表現は鬼門
0019名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:32:08.39ID:rkfjyvcM
Parl死ね

氏ねじゃなく死ね
0020名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:33:16.42ID:vQTXve7T
>>16
一週間前に自分で書いたやつが理解できないときあるもんな
0021名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:34:42.86ID:0WaNeL3r
 


〜以外っていうのがやりにくいんだよな。


 
0024名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:37:35.24ID:rVEy9e7s
正規表現が役に立つのは、テキストエディタのみで不具合解析とかソースコード解析する時だな。
たまに統合開発環境すら入れさせてくれない現場で、サクラエディタとか秀丸を駆使して解析したわ。
0026名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:40:59.69ID:7WvaJvkL
パキュレーションサイトってこれで変換してるだけだろ
0027名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:42:18.62ID:d7k+iogF
簡単な正規表現だったら、誰でもできるだろ・・・

yy/MM/dd kk:mm:ss の日付の日だけ欲しいときに、いろいろ処理するのと
正規表現を使うのとでは、まあ確かに正規表現のほうがわかりやすそうではある
処理でやるのだと、" "でsplitして〜とかやるんだろうなw
0028名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:42:39.29ID:LQnNkz1W
メンテの仕事は俺に回ってこないし、それで俺の給与が増えるとも思えない
本当にアドバンテージになるの?
0029名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:44:44.06ID:fca26N9N
javascriptの配列処理を理解するのに1年かかった。
0030名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:46:45.27ID:q5e8P/AY
覚えてたけど忘れた
0031名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:51:51.45ID:HbBv1KyO
書いた奴のドヤ顔が浮かんできそうな自己満足的な糞長い正規表現とかの方がメンテナンスしづらいがな
0033名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:53:44.48ID:3kNZyv6C
ワイ中卒javascriptはnode::repl
phpはartisan
ダックタイピングしないと死ぬ病
書いてる最中に全てを忘れてくので
phpはリフレクション必須
0034名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:53:51.22ID:r2+Rdi3U
正規表現で表現しきれないものまで無理に正規表現を使うな
0035名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:56:41.01ID:yPVnhacC
使わないとすぐ忘れるんだよな
0036名刺は切らしておりまして
垢版 |
2018/06/01(金) 18:58:08.43ID:fca26N9N
よっぽど人手が足りないんでしょう。
0037名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:03:05.07ID:bsUdUHbV
ログ分析の前処理に正規表現かけてデータ取り出してログストレージに突っ込んでるお(´・ω・`)
0038名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:07:00.52ID:qprJtppj
英会話と同じで、使わなければドンドン忘れて行く
0039名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:12:10.51ID:CyAbtJWx
逆に正規表現ができないプログラマとか、Sierとか、なんの冗談ですか?
0040名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:13:51.24ID:sGRZ9pEE
これを正規表現で抽出するにはどう書けばいいんだっけ... てあんちょこと睨めっこしてるうちに
正規表現使わずに文字列処理するプログラムが書けてしまうという
0041名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:18:24.56ID:p/QuyIG6
複雑な正規表現は、メンテの手間と、バグのもと。
仕様変更を頼まれたら逃げる。

$mail_regex = q{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\}
. q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][}
. q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x}
. q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-}
. q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(}
. q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0}
. q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*}
. q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,}
. q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[}
. q{^\x80-\xff])*\]))*};
0042名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:19:17.49ID:3AjYx9SG
>>19
nono,perl
0044名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:34:41.56ID:GkPRDYBp
結局やりたいこと出来ない場合が多い。
互換性あって、もっと簡単にできないの?
解析で覚えても時間の無駄な気がしてイライラする
0045名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:36:10.93ID:VRTVO5BK
47歳でいきなり社会復帰しろといっても無理だわな
0046名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:37:59.05ID:ooETPHlN
俺が正規表現を覚えて絶望したことは
言語毎に正規表現が微妙に違うことに初めて気がついた時。
二つ目の言語やるまで、恥ずかしながら知らなかった。
0047名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:40:05.83ID:DrSW68nt
>>46
あんまりにも複雑な表現は覚えても仕方ないし使い所ないよね?
VIの検索置換とか、そういうのを使うために覚えるのはありだが
簡単なものは覚えてると仕様書書くときとかにも使える
相手もある程度コーダーな人であるという前提になるが
下手な絵よりもわかりやすく誤解がないのがプログラム構文的な式を直書きすること
0048名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:44:31.08ID:gnYIYObN
全部ラダーにしろ。w
0049名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:46:09.65ID:Eb9AVo6L
/\(^.*\)/\1/p
0051名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:49:48.92ID:xW4RWcs7
 
拡張正規表現でないと不便
0052名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:51:00.79ID:q5e8P/AY
遠い記憶だと

意識して使い始める

統一を意識するあまり一部が難解になる

無理に統一する意味無くねと思い始める

忙しいのに、やってられるかとちゃぶ台を返す

記憶から消去

みたいな感じだったような...
簡単なやつは使えたはず
0054名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:52:36.62ID:5a/qFLwK
正規表現での検索だけを使ってるうちはさほどでもないけど、
キャプチャして置換を覚えて便利に使うようになると
他の人(未来の自分を含む)に読めない式を量産しちゃうので要注意。

正規表現を組み立てるパズルが面白すぎるんだわ。
0055名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:53:59.14ID:I4i42Rhm
ボケ防止
0057名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:56:04.01ID:DrSW68nt
>>52
みんなそうだと思う
使うにしたって、PGを相手に実装されたような一部のツールで使うくらいだ
そのツールの一部有用な記述だけ習得して大多数は記憶から抹消するよ
コーディングにこんなもん本格的に使ったら引き継いだやつが泣きを見るし
UIで正規表現前提のもの作ったら客からクレームが来る
0058名刺は切らしておりまして
垢版 |
2018/06/01(金) 19:57:33.67ID:E4cvvVe6
一番役立ってるのが、数字に3桁毎にカンマを入れるやつ
$val =~ s/(?<=\d)(?=(?:\d{3})+$)/,/g;
0059名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:02:12.92ID:vQTXve7T
>>58
俺はあれやな
ファイル名の連番の桁揃え
0060名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:02:49.81ID:D+WkwilS
ERGのテキスト監視→コピペ→棒読み自動読み上げで鍛えた正規表現を仕事で活かし、さらにレベルアップを図って正確なERGセリフの抜き出しが出来るという相乗効果
0061名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:06:48.40ID:AhxR188d
文字コード変換に使う正規表現ライブラリとかそれ系の処理が不要になったとしてもだな
-------------
便利過ぎるぞ
------------
0063名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:22:05.11ID:pm+ptodW
素人さん辺りからそんけーの目で見られる
0064名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:30:19.67ID:Eb9AVo6L
働き方改革
昔はファイル名を手作業でひとつずつ変更していたものを一瞬で変換できる
0065名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:31:34.99ID:evgGcoLn
正規表現はプログラム書くなら常識中の常識でしょ

個人的にはそれよりも
ちゃんとした擬似言語を書けるようになりたい
0066名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:37:19.28ID:bxP2zTqj
(ちんこ|まんこ)
0067名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:42:20.56ID:AhxR188d
>>45
おまプログラミング最高やで!
しかも元プロなら言うことなし
0068名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:43:51.97ID:BHVkhBs1
>>16
正規表現そのものには、コメント入れられないからね
そこは不便
一致や置換の例でも、書いとくかね?
0069名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:44:52.42ID:BHVkhBs1
>>24
ファイル探すのに使わない?
0070名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:45:42.40ID:BHVkhBs1
>>41
ぎゃー
やめてくれー
0071名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:46:49.31ID:BHVkhBs1
>>34
これは鉄則だよね
0072名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:49:10.59ID:BHVkhBs1
>>46
極力、基本正規表現だけで表して、覚えることを
最小限にしてるよ。
0073名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:51:19.39ID:dbFqKXn3
>>1
正規表現使わないプログラマーとかっているの?
0074名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:52:08.86ID:xiO89GIJ
これがビジネスニュース???
0075名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:52:44.67ID:E4cvvVe6
/((?:ち|ま)ん)こ/$1ぽ/g
0077名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:56:06.33ID:2v8UEnCs
>>1
スクワーム
クリープショー
物体X
0078名刺は切らしておりまして
垢版 |
2018/06/01(金) 20:58:44.36ID:gwcTjZ0p
>>73
プログラム以外で正規表現って?
0079名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:00:43.59ID:fpKhwtIR
全く使ったことないけど、データベースとかだとつかうの?
0081名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:05:21.90ID:evgGcoLn
>>79
たとえばMySQLではREGEXP演算があるね
抽出条件の記述に使える
0083名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:06:01.51ID:Q5gxvhRN
通常言語の記述が複雑になりすぎるとき以外は使わない
メンテを考えるとほかの人に渡しにくいから
0084名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:06:45.18ID:GozHDCGl
絶対にメンテしたくない。。。
0085名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:07:12.65ID:Q/QSEBNk
>>20
用途を添えて別のテキストへ蓄積
0088名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:08:48.80ID:FYIvMyBN
無いと仕事にならん
0089名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:10:01.46ID:EH8m4JKz
覚えればべんちだけどまあ、覚えなくても何とかな・・・

JavaScriptでも使ったりするから覚えたほうがいいのか
0090名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:10:48.49ID:FYIvMyBN
>>73
自分プログラマですが
むしろ正規表現に依存しすぎて
悩んでるぐらいやで…
0091名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:11:23.36ID:G9Jqdlx4
ソースコードやファイル名のGrep検索とストアドプロシージャ、Webの入力項目のチェックとかで使うのかな?
0092名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:12:31.19ID:xoDSuwUH
Jgawkの一行野郎!で多用されるあれか
0093名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:13:32.41ID:E4cvvVe6
IoT(処理)の半分は、RegEx(処理)だろ。
言語の内部処理も、半分は同じだろ。
知らないのは、お前だけ。
0094名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:15:35.03ID:evgGcoLn
ただ個人の意見としては、
パフォーマンスとのバランスを見ながらほどほどにって思う

正規表現に凝りすぎてプログラム全体の処理速度が落ちては本末転倒なので
避けるべきでしょう
0096名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:16:40.81ID:AS7EyvlG
>>34
RFCのメアドテストはギリギリだろうか?
0099名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:23:14.31ID:l9A8ePwy
>>97
解析するためのツールとしては役に立つかもしれない
入力に関しては表現を冗長にしたら利便性が失われるだけ
0101名刺は切らしておりまして
垢版 |
2018/06/01(金) 21:23:47.34ID:kuXoh/CS
変態ハッカーになりたくて本読んでるけど・・・みたことないぞ。
まだまだ変態になる道さえ見えない、まだ本を読み足らないってことか。
とりあえず遊んで読んでる本に正規表現あるかみてみたら載ってた。
この分野の本で変態になれるのだるろうか。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況