質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

5回答

1073閲覧

正規表現はどういったところで使えるのでしょうか?

Yamato_kawakami

総合スコア20

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2019/03/23 10:53

正規表現はどういったところで使われるのでしょうか?
先ほどQiiteにて”初心者歓迎!手と目で覚える正規表現入門”を閲覧しました。
正規表現ではテキストに書かれた文字列を(. ? + *)などのコードを書き文字を摘出していますが、実際にどんなところで使われるのでしょうか?その摘出された文字はデータベースに取り込まれたりするのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamato_kawakami

2019/03/23 11:08

正規表現をしようすることによって便利になるような場面がどういったところにあるのかが知りたいです。
Yamato_kawakami

2019/03/23 11:09

修正以外に使える場面があるのかの方がいいですかね?
m.ts10806

2019/03/23 11:54

>その摘出された文字はデータベースに取り込まれたりするのでしょうか? これは単なる仕組みの問題であって、「そのように作るかどうか」は作り手によってくるのでは。 本当は何が得たいのでしょうか。この答えを得た結果、何をしたいのでしょうか。
m.ts10806

2019/03/23 11:55

あと細かいですがQiiteではなくQiitaです。 ひとまず先に質問を具体的にしてください。質問は編集できますので。
guest

回答5

0

ベストアンサー

正規表現には大きく三つの用途があります。

検索

まず一つは検索です。

正規表現は検索したい場面のほぼすべてで有用です。
単純な文字列検索でできることはすべて正規表現に書き直すことができますし、それ以上のこともできます。
たとえば電話番号、CSV、日時など、特定の法則にのっとって書かれたものを見つけることができます。

つまり「検索はどこで使えますか?」という質問に答えれば、あなたの質問の三分の一に答えたことになります。
しかし、答える必要があるでしょうか?

テキストエディタで検索したことはありませんか?
Google を使ったことはありませんか?
データベースを使ったことはありませんか?

Google やデータベースでは正規表現は使えませんが、使えたらとても便利でしょう。
そうして見つけたものを別のものに置換すれば修正になりますし、抽出して別の用途に使うこともできます。
抽出したものは無条件でデータベースに取り込まれるのではありません。
どのように使おうが使用者の自由です。

バリデーション

正規表現のもう一つの用途は、入力されたデータが正しいかどうかをチェックすることです。
例えば数字を求めているところに「あいうえお」と入力されても困るでしょう。

「パスワードを入力してください」と言われて入力した時に「短すぎます」「複雑さが足りません」など言われたことはありませんか?
「電話番号を入力してください」と言われて入力した時に「入力が不正です」と言われたことはありませんか?
このような場合に正規表現が使われています。

分析

三つ目の用途は、データの分析です。
例えば次のようなデータがあるとします。

2018/12/1 鉛筆(100円) 2019/1/20 消しゴム(120円) 2019/1/25 切手(82円) 2019/2/5 切手(164円) 2019/3/24 鉛筆(200円)

正規表現を使えば、このようなデータを簡単に分析し、月ごとの金額の合計を求めたり、何をどのくらい買ったのかを求めたりすることができます。
サーバーなどは実行ログを記録しますが、それを分析するのにも良く使われます。

投稿2019/03/23 23:51

編集2019/03/23 23:53
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamato_kawakami

2019/03/24 06:27

すごくわかりやすいです! ありがとうございます
guest

0

ログの集計や調査でよく使います。
例えば 下記のような一般的なmaillogの送信元と送信先を1行で表示したいとします。
maillog は from と to の行が別れていて、 queueid が一致するメールが同じメールのログとなります。

Mar 23 19:04:58 vps postfix-inbound/qmgr[10339]: 5120C546D2E1: from=<bounce-000609027-000008849b84a6@fc5219.cuenote.jp>, size=70068, nrcpt=1 (queue active) Mar 23 19:04:59 vps postfix-inbound/lmtp[5774]: 5120C546D2E1: to=<recruit@example.com>, relay=127.0.0.1[127.0.0.1]:24, delay=6.8, delays=6.7/0.02/0.01/0.05, dsn=2.0.0, status=sent (250 2.0.0 <recruit@example.com> CLQ9AcsEllyPFgAA4Pc6PQ Saved) Mar 23 19:11:58 vps postfix-inbound/qmgr[10339]: BC892546D2E1: from=<ds-id0jtlc31z6hc.fb8d9453@bounce.inte.mailds.jp>, size=117094, nrcpt=1 (queue active) Mar 23 19:11:58 vps postfix-inbound/lmtp[6511]: BC892546D2E1: to=<recruit@example.com>, relay=127.0.0.1[127.0.0.1]:24, delay=6.6, delays=6.4/0.11/0.02/0.1, dsn=2.0.0, status=sent (250 2.0.0 <recruit@example.com> RcEHDG4GllxwGQAA4Pc6PQ Saved) Mar 23 20:19:04 vps postfix-inbound/qmgr[10339]: B718A546D2E1: from=<dovecot-bounces@dovecot.org>, size=10238, nrcpt=1 (queue active) Mar 23 20:19:04 vps postfix-inbound/lmtp[13650]: B718A546D2E1: to=<itml@example.com>, relay=127.0.0.1[127.0.0.1]:24, delay=5.2, delays=4.5/0.53/0.09/0.07, dsn=2.0.0, status=sent (250 2.0.0 <itml@example.com> Sc2oLygWllxTNQAA4Pc6PQ Saved)

queueid は任意の文字列なので \w+ や \S+ などの正規表現でマッチさせると抽出しやすいです。

perlでの抽出例 cat maillog | perl -ne '{if(/postfix.*: (\w+): ((from|to)=\S+>),? /){$k{$1}{$3}=$2;}}END{foreach(sort keys %k){print "queueid=$_ $k{$_}{'from'} $k{$_}{'to'}\n";}}' queueid=5120C546D2E1 from=<bounce-000609027-000008849b84a6@fc5219.cuenote.jp> to=<recruit@example.com> queueid=B718A546D2E1 from=<dovecot-bounces@dovecot.org> to=<itml@example.com> queueid=BC892546D2E1 from=<ds-id0jtlc31z6hc.fb8d9453@bounce.inte.mailds.jp> to=<recruit@example.com> \S+ (|) \w+ .* ,? などが正規表現です。

任意の文字列をキーとした集計には必須ですね。

投稿2019/03/23 11:41

編集2019/03/23 11:44
scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現はどういったところで使われるのでしょうか?

正規表現を解釈する処理を持っている言語/ツールで使われています。

【正規表現 - Wikipedia】
https://ja.wikipedia.org/wiki/正規表現

投稿2019/03/23 11:28

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もしも正規表現を学びたい際には、以下のサイトが非常に分かりやすいので、良かったらぜひ試してみてください。実用例も豊富なので、僕がダラダラ説明するより数百倍分かりやすいと思います。
https://qiita.com/jnchito/items/893c887fbf19e17d3ff9

投稿2019/03/24 17:13

bamboo-nova

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規費用源 利用場面
で google 検索してみました。

参考情報

  • プログラマーが正規表現を使いこなすメリットとは? 『正規表現辞典 改訂新版』著者に訊く

https://codezine.jp/article/detail/10855

...
個別のアプリケーションにおける入力値検証などに利用することはもちろん、アプリケーションやミドルウェアのトラブルシュートにおけるログの分析や、既存データのクレンジングなどに活用しています。
ログ分析では必要なログのみを抜き出す、あるいは不要な部分を刈り取るために正規表現は欠かせません。データのクレンジングでは不要なデータを排除する、あるいは不正なデータを正しい形式に整形するといった作業が必要となりますが、このような局面でも正規表現はそのパワーを存分に発揮してくれます。
...

  • 【徹底解説】正規表現で作業効率化!

https://truria.xsrv.jp/infoCatch/2018/05/04/post-122/

...
例えば、「以下の文字列群から、値段をすべて500円にしてほしいと」言われたとします。
商品A 値段500円 備考:からい
商品AX 値段6000円 備考:すっぱい
...
以下のように置換すれば、一瞬で仕事が終わります。
サクラエディタで置換してみましょう。
置換前:値段.*円
置換後:値段500円
...

投稿2019/03/23 22:49

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問