【IT】プログラマーが正規表現を使いこなすメリットとは?
■ このスレッドは過去ログ倉庫に格納されています
皆さん、正規表現は使っていますか? 開発者にとってテキスト処理は面倒な場面も多いですが、正規表現を駆使することで一気に効率化することもできます。今回、『正規表現辞典 改訂新版』の著者・佐藤竜一さんに、正規表現を使うメリットや本書についてうかがいました。
――『正規表現辞典 改訂新版』は目的別の検索ができるリファレンスですが、正規表現の歴史や背景についても解説されています。今回は佐藤さんに本書についてお尋ねしますが、まずはご自身のことを教えてください。
佐藤:勤務先はいわゆるSIerですので、各種システムの企画・構築を主業務としています。主に担当しているのは企業向けのアプリケーション開発基盤の構築や、個別システムに対するアプリケーション・アーキテクチャの立案といった分野ですね。
世間的には「アーキテクト」と呼ばれる職種になりますが、私自身はプログラマーとして個別の問題と向き合い、頭を絞るほうが好きです。
――仕事では正規表現をどう活用されているのでしょうか。
佐藤:個別のアプリケーションにおける入力値検証などに利用することはもちろん、アプリケーションやミドルウェアのトラブルシュートにおけるログの分析や、既存データのクレンジングなどに活用しています。
ログ分析では必要なログのみを抜き出す、あるいは不要な部分を刈り取るために正規表現は欠かせません。データのクレンジングでは不要なデータを排除する、あるいは不正なデータを正しい形式に整形するといった作業が必要となりますが、このような局面でも正規表現はそのパワーを存分に発揮してくれます。
読みやすさやメンテナンスのしやすさで差がつく
――プログラマー(開発者)として、正規表現を使いこなすのと使いこなさないのとでは、どんな差がつきますか?
佐藤:テキストを相手にする処理では、正規表現を活用することで簡潔かつ分かりやすい記述が可能となるケースが多々あります。正規表現をうまく使えないプログラマーは、ちょっとした処理でもループでテキストを文字単位に分割し、複雑な条件分岐を処理中に記述してしまいます。
このようなプログラムは確かに動作するかもしれませんが、読みやすさやメンテナンスのしやすさという観点で見れば大きなマイナスとなるでしょう。
「正規表現を使いこなす」という質問からすると拍子抜けされるかもしれませんが、正規表現を使って解決すべき現場の問題の多くは、基本正規表現と拡張正規表現の範囲でも十分まかなえます。
ですので、本当に基本的な部分をちゃんと理解するだけでもプログラマーとしては大きなアドバンテージになります。大切なのは個々のメタキャラクタの意味をきちんと押さえること、そして実践を繰り返すことでしょう。最初はとっつきにくく見える正規表現も、慣れてくるうちに自然と記述できるようになります。
――開発者以外でも正規表現を使えることでどのような利点がありますか?
佐藤:現在は開発者以外の方でも、各種のクラウドサービスなどのツールやリソースを活用して生産性の向上、さらにはビジネス上の成果を求められる時代です。処理対象の指示や結果の加工に正規表現が必要とされる、あるいは正規表現を使うことでより柔軟な処理を実現できるといった局面は今後も増えてくるはずです。
たとえば、RPA(Robotic Process Automation)ではExcelやPDFファイルから特定のデータのみを抜き出し、妥当性を判断し、加工したうえで最終的な結果を得るといったことが普通に行われます。このような処理は、それこそ正規表現が最も得意とする領域です。
結果に辿りつく過程を理解してほしい
――2005年に出版された初版と、この改訂版が出る間に、どのような変化がありましたか?
佐藤:本書の前書きにも書きましたが、Unicodeが文字コードの標準的地位を獲得したことです。文字の選択はUnicodeのプロパティにもとづいて行われるため、たとえば1文字の数字を表す「\d」はUS-ASCII以外の数字にもマッチすることが当然になりつつあります。
また、絵文字のように複数のコードポイントを消費して目に見える1文字を表すケースもこれまで以上に増えました。本書でも可能な限り、これらのポイントについて説明しています。
https://codezine.jp/article/detail/10855 まあ使えないとちまちま手作業で切り貼りするような単純作業が発生して労働負荷が上がる。
それでも若いうちは頑張って素早く操作してカバーしてしまうんだよな。 つうか正規表現使わずによくコーディング出来るな
置換とか検索とかしないの? >>309
複雑な条件じゃなかったら正規表現使うまでもないからな >>309
たぶん文字列の中の文字をリニアサーチして置き換えるような処理をいちいちつくるんだよ。 正規表現に戸惑うくらいのバカだから
AGどころかKMPもBMも知らんし
バカサーチを手書きでも仕方ないよね
バカはバカなりに工夫してる
下手なことして自分のバカが原因で躓かないように 正規表現使えるとドヤ顔できるのに、納期内、定時内で仕事が終わらないのは、無能だから?
バグの原因は、正規表現で検索できないの?(w >>316
100パーセントお前の会社のせい。
本人が無能→そんな人材しか採用できないお前の会社の格の低さのせい
納期が短すぎ→そんな仕事しか獲ってこれないお前の会社の格の低さのせい、または経営陣、または職場全体のモラルが低い >>316
正規表現すら使えないお前にやらせたら納期どころか一生完成しないだろうな splitしてjoinしたほうが1万〜10万倍早いのに
なぜかパターンマッチを使ってしまう謎の人たちは
何考えてんのかわからない
機械が低速の時代はまず他の方法を探せって言われた >>317
フリーランスですが? 納期が短いって、何人がかり、何年がかりで開発してるの?
>>318
正規表現が使えないとは一言も言ってないのだが? 何で日本のソフトウエアエンジニアってこういう些細な事でマウント取ろうとするんだ?
そういう余裕のなさが一番かっこ悪い。時代遅れでもある。 >>319
正規表現が遅い環境では、splitもjoinも遅くて使えんよ >>320
こんなところで天狗になって嬉しいのか
寂しいやつだな 正規表現信者怖過ぎ
こいつらバグ作り込みまくるから死んで欲しい 正規表現信者とか頭大丈夫か?
正規表現なんてプログラマが普段使う最低限の技術のうちの一つでしかないわ
最低限にすら達しないカスがプログラマぶってるのが恐ろしい どこの学校でも正規表現くらい情報技術のイロハとして教えるだろ
正規表現使えないって高卒でプログラマになったのか? プログラマで正規表現ができるとマウントが取れるとかないでしょw 正規表現が使えないってマウスが使えないレベルでやばいいじゃん、プログラマとしては まあ使えて当たり前だし
方言を何とかして欲しいとは思うが 使えると使いこなせるのとは違うのに。
(´・ω・`) 誰もが必要なら自分に可能な範囲で使うもんなんだ
言語というものは
母国語含めた自然言語だってそう >>337
こういう肝心な事理解してない奴だらけだから
意味不明な宗教論争にしかならないんだよなぁ 「エクセルで業務効率化」とか言ってる連中が何時間もかけて参照とコピペでちまちま作業してたから
CSVに落として正規表現かけて、トータル5〜6分で全工程終わらせてやった >>340
正規表現の調べ語としてると、マニアクラスなのに出会ってしまう 複雑な文字列の抽出が一発でできたときの感動とコードがシンプルなところかな。 プログラマーがSQLを使いこなすメリットは?
と聞かれても割と困るのと同じ この前本屋でExcelで正規表現を勉強しようってタイトルの本を見た >>34
表現しきれないなら使えるわけないだろ
馬鹿か
お前が言いたいのは
式が複雑になりすぎる時は利用を断念することも検討しろ
という事だろ
簡単な日本語も使えない奴は何やっても駄目 >>346
素直に読めば分かることなのに、角の立つ言葉を使って反応するのはヨクナイ。
もういい加減そういうのやめようよ。
確かに正規表現が厄介なのは、複雑になると漏れがないかが検証しずらい事。
あえて複数行に分ける、とかいう判断が「使いこなし」のポイントだとおもう。 エクセルの関数でjavascriptが使えるようになるらしいから、エクセルでの正規表現も使いやすくなりそうだね パーサー使うべきところで正規表現で一時しのぎするゴミ
これが正規表現信者 >>349
パーサーの内部で正規表現使われてるかもしれないじゃないですか >>350
パーサーが何かも知らないの? ってか、プログラム書けないんじゃ? >>351
ん?
パーサーって構文解析器だろ
内部で正規表現使ってたって不思議ではないぞ 一つの正規表現に記号20個以上書いたら尻に電流流す椅子を普及させたい いつもある程度複雑になって、先読みとかキャプチャーとかググって、メンテ考えるとspilitでちぎって手続きした方が楽じゃね?ってことになって、部分的な共通関数にバリデーションチェックでひっそり使うくらい
グダグダ文章ごめん
この手の話って、使いこなして当然とかの厨房が湧いて荒れるよね、大概。
俺は大手のプロジェクトに参画してるやつだけに意見聞きたい >>360
数行の文章も整理も出来ない奴が大手プロジェクトとかw
お荷物だろ >>361
大手のプロジェクトって人数必要だから5次受け6次受け当たり前、
正規表現どころかC言語すら怪しいレベルの奴がいっぱい集まってるぞ >>362
大手のプロジェクトに参画して喜びの止まらない10次受けくらいの底辺企業のバイト高校生あたりがイキッて書き込んでるんだろ 今時正規表現なんて可視化するサイトあるやろ
そこ放り込めばメンテも楽にできるわ いやいやいやいや、メリットとかw
正規表現とANSI SQLは、基礎知識だろ
むしろ何で知らないの?ていうレベル。
開発SE経験ゼロのプロマネとかならいそうだけど。 プログラマー板を見てると正規表現を使えないエンジニアの話が出て来たりするから、何か自信が湧いてくるわ。 底辺が嬉しそうに語りながら、保守を考えない一本釣りの正規表現を書くのがムカつく
SQLとかも同じ、一本のSQLにロジック入れまくるやつ 20年以上前の話だけど
あるシステムで吐き出すログファイルを
sedスクリプトで編集して有用な情報を出力するようにした事ある
その行数は100行を超えていた
その後どうなったかは定かではない >>370
パターンスペース、ホールドスペースも使った?
俺はsedは最長でも20式くらい
awk,perlが標準では入ってない時代のUNIXで書く必要があったから
確か両スペース共使わないとうまく1パスで処理できなかった >>370
そこまで長くなると素直にCで書いたほうがよさそうな >>372
Cしか使えない環境とかでもない限りテキスト処理にCはないわ そういう時はさくっとJavaScriptで書いてNodeだな最近は
昔はPerlだったけど Javascriptはもうちょっと正規表現の仕様がまともだったらなあ
機能は多くなくていいから
仕様書に操作的意味が書いてあるのは評価できる Windows なら PowerShell
Linux なら Python
で書くかな Hello Worldレベルならともかく、糞遅いPythonで文字列処理はありえないなぁ。 正規表現は最後の手段だよ
どうしても正規表現しか使えない場合は正規表現使う
正規表現わかりませんは論外だけどな
クソ長くて複雑な正規表現も論外だが 長年使われてきた知見の蓄積があって、枯れたライブラリがあって、確立された手法がある
使わない理由がないのだが、
なんで最後の手段なの?他にもっとよい方法がいっぱいあるの? 枯れたライブラリって具体的にどれのこと? エスケープ文字とか互換性ないし、そもそも日本語の
処理に至っては、文字コードの関係でグダグダなのに? 日本語をまともに扱えないゆとり脳に大人気のPythonのことですね。 >>386
負帰還の事だよ
常識なので覚える様に
(´・ω・`)b 大学で情報工学を体系的に学んだプログラマと、
プログラム言語やIDEの使い方を知ってるだけの専門卒プログラマ
一口にプログラマといっても全く別物ですから >>390
大学で学んだって、他人の成果である過去の知識を詰め込んだだけの、単なる劣化コピーでしょ。 >>391
知識を詰め込むだけなら大学じゃなくて専門学校だよ。 専門卒の人も偏差値高かったら東大や京大行ってたやろ?
なんで専門なのか世の中の人がどう思うか考えた方がええで >>393
偏差値は国立大に入れるレベルにあったけど、そもそも受験してないし、専門学校も中途退学
しようと思ったくらい。 一応卒業したけど、就職活動も専門学校卒業前年の夏休み終わった
9月からくらいで、1ヶ月か2ヶ月くらいしかしてない。 それに、別に他人の目なんていちいち気に
しませんよ。
んで、まだ世間一般には、コンピュータはアニメやSFの中で電球がチカチカして計算するものって
くらいの認識しかなかった当時、アルバカーキーのマイクロソフトを訪問した4人の日本人の1人が
経営していた会社に入社した。 同期入社が確か7〜8人で東京理科大卒の人も1人いたね。
実は入社するまで会社のことはよく知らんかったけど、入社3ヵ月後には新製品の回路設計
やってたかな。 もし高卒までタイムスリップして、記憶を消して人生リセットできると言われても、
たぶん似たような選択肢を選ぶと思うナァ。
まぁ、300万からの借金を抱えて大卒を選ぶのも本人の自由や。 せいぜいガンバレや。 まぁ、論文を捏造したり、研究成果をデッチあげて国の研究費を遣い込むってのは、
大学でしかできないですね。 国立大入れるなら300万使ってでも行けよ
生涯賃金で考えないの?
専門学校でもいくらかはかかってんだろw >>391
学ぶということの意味を知識の詰め込みだと思ってるのか
哀れだな >>399
「学び」をそういうことだと捉えている人は多い。まともな「学び」の
経験がない人、いわゆる低学歴の人によく見られる。 >>391
まるで独自言語でも開発した、みたいな人や
まさか他人が作ったもの借りて日銭稼いでないよな? おやおや。この国は、いつのまにか低能先生予備軍がイパーイのようですね。 誰も
使わない独自言語なんて、まさに典型的な研究者のオナニー、車輪の再発明ですよ。
それに、正規表現使うとか、vi使うとか、正規表現の解説書とか、他人がつくった
もの借りて日銭稼いでる典型じゃないですか。
昔から人工知能やら音声合成やら研究していますっていたけど、古くはPrologや
Lisp、最近だとTenserflowとか、どれも他人が作ったものじゃないの?
学び(wとか、研究していますとかいえば、上から目線で語れるとでも? 【移民いれて、穴埋″】 25△39△17△20△10△2▼13△13△5△5▼3△ <311> 26▼28▼22▼21▼
http://rosie.5ch.net/test/read.cgi/liveplus/1530842425/l50
サリンの犠牲者たったの10人、放射能の犠牲者は毎年20万人!! 移民20万人入れて誤魔化し! >>402
それは別に悪いことじゃないと思うけどお前さんは違うんだろ? >>404
別にいいとも悪いとも言ってないが? 日銭稼ぎが悪いみたいな中二病丸出しの
>>401=404 って、もしかして低能先生みたいな高学歴のヒキコモリなの? >>405
あれあれ?どこかに日銭稼ぐのが悪いと書いてありましたか? >>406
ハイハイ。 悪いと書いてないだけで、
> まさか他人が作ったもの借りて日銭稼いでないよな?
の下りに悪意がないとでも? そういうコミュ症に加えて、大卒という無駄に高い
プライドが邪魔して、仕事が続かなくてヒキコモリになっちゃうんですね。
戦後間もなくならともかく、大卒なんて今じゃ量産型ジムやボールと同じくらいの
価値しかないのに。 >>407
なんで大卒をそんな毛嫌いしてるのか知らんが俺は工業高卒だぞ ■ このスレッドは過去ログ倉庫に格納されています